首页 > 解决方案 > 如何以静默方式将浏览器重定向到重定向 Uri 以避免身份验证弹出 (AAD)

问题描述

我们正在开发一个项目,我们正在使用 Azure Active Directory 对用户进行身份验证。身份验证成功后,用户的浏览器会收到一个 Id 和访问令牌,然后我们使用相同的访问令牌来查询其他 Microsoft 产品(Sharepoint、OneDrive 等)。

当用户尝试在我们的应用程序上搜索某些内容时,我们还必须使用 Elastic Search 对用户进行身份验证。为此,我们在弹性搜索集群上设置了一个弹性 OIDC 领域,并使用自定义 Web 应用程序作为依赖方对我们的用户进行身份验证。简而言之,通过将浏览器重定向到发送回 AAD 的重定向 Uri (dataset1**),要求之前成功通过身份验证的同一用户再次在弹性中进行身份验证。但是,当在用户浏览器中完成重定向时,身份验证弹出窗口再次出现,客户端必须选择用户名才能获得响应。但是,会从缓存存储中获取访问令牌,并且不会再次请求密码。

有没有办法避免打开 Microsoft 身份验证页面(第二次)并静默获取令牌?我们可以将用户重定向到身份验证页面,但它不应该要求用户单击他们的用户名,而应该使用令牌返回应用程序。

数据集1**

重定向 URI - https://login.microsoftonline.com/{tenant-Id}/oauth2/v2.0/authorize?scope=openid+email&response_type=code&redirect_uri=https://localhost:4200&state=lPk4uPPPMm0_LKgEmavga7p-cQSlMn8Ikz3PSvRIicQ&nonce=3CKNjofS_0Fh1jBPid_TA8dKrjQKA&C =bb842c64-093c-40d0-a62f-13cc0a0cbcb1

这是我的角度代码,它将用户重定向到重定向 uri –</p>

  AuthenticateElastic(): void {
    this.azureFunctionService.PrepElastic()
      .subscribe((authenticationResponse: any) => {
        this.dataShareService.setstate(authenticationResponse.state);
        this.dataShareService.setnonce(authenticationResponse.nonce);
        **document.location.href = authenticationResponse.redirect;**
      });
  }

在 dataset1** 上共享的重定向 URI 是为 document.location.href 设置的,它重定向用户浏览器并且身份验证弹出窗口再次出现。 document.location.href = authenticationResponse.redirect;

标签: angularauthenticationazure-active-directoryopenid-connectmsal

解决方案


为了静默地重定向呼叫,我按照文档https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow确认同时通过了 prompt=none&login_hint= “我的用户名@xyz.com”。传递这两个参数可以解决问题。

谢谢

在此处输入图像描述


推荐阅读