如何以静默方式将浏览器重定向到重定向 Uri 以避免弹出身份验证 (AAD)
How to silently redirecting the browser to the redirect Uri to avoid authentication pop up (AAD)
我们正在开展一个项目,在该项目中我们使用 Azure Active Directory 对用户进行身份验证。身份验证成功后,用户的浏览器会收到一个 Id 和访问令牌,然后我们使用相同的访问令牌来查询其他 Microsoft 产品(Sharepoint、OneDrive 等)。
当用户尝试在我们的应用程序上搜索某些内容时,我们还必须使用 Elastic Search 对用户进行身份验证。为此,我们在弹性搜索集群上设置了一个弹性 OIDC 领域,并使用自定义 Web 应用程序作为依赖方对我们的用户进行身份验证。简而言之,要求先前成功通过身份验证的同一用户通过将浏览器重定向到发送回 AAD 的重定向 Uri (dataset1**),在弹性中再次进行身份验证。但是,当在用户浏览器中完成重定向时,身份验证弹出窗口再次出现,客户端必须 select 用户名才能获得响应。但是,从缓存存储中获取访问令牌并且不再请求密码。
有没有办法避免打开微软认证页面(第二次)并静默获取令牌?我们可以将用户重定向到身份验证页面,但它不应该要求用户单击他们的用户名,并且应该 return 返回带有令牌的应用程序。
数据集 1**
这是我的 angular 代码,它将用户重定向到重定向 uri –
AuthenticateElastic(): void {
this.azureFunctionService.PrepElastic()
.subscribe((authenticationResponse: any) => {
this.dataShareService.setstate(authenticationResponse.state);
this.dataShareService.setnonce(authenticationResponse.nonce);
**document.location.href = authenticationResponse.redirect;**
});
}
为 document.location.href 设置了在 dataset1 之上共享的重定向 URI**,这会重定向用户浏览器并再次出现身份验证弹出窗口。
document.location.href = authenticationResponse.redirect;
客户端询问授权服务器,显示或不显示登录和/或同意屏幕
GET /authorize?...&prompt={none}&
none - 未显示登录或同意
prompt=none参数导致Auth0使用指定的response_mode立即将结果发送给指定的redirect_uri(回调URL),有两种可能响应:成功或错误。
可选场景:
您可能希望避免在用户每次从同一浏览器登录时提示他们进行多重身份验证 (MFA)。为此,请设置一个规则,以便每个会话仅发生一次 MFA。这在执行静默身份验证(提示=none)以在用户会话期间更新 SPA 中的短期访问令牌时非常有用,而不必依赖将 allowRememberBrowser 设置为 true.
参考:配置静默身份验证(auth0.com)
为了静默重定向呼叫,我按照文档 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow 确认通过了两个提示=none&login_hint="my_username@xyz.com”。传递这两个参数可以解决问题。
谢谢
我们正在开展一个项目,在该项目中我们使用 Azure Active Directory 对用户进行身份验证。身份验证成功后,用户的浏览器会收到一个 Id 和访问令牌,然后我们使用相同的访问令牌来查询其他 Microsoft 产品(Sharepoint、OneDrive 等)。
当用户尝试在我们的应用程序上搜索某些内容时,我们还必须使用 Elastic Search 对用户进行身份验证。为此,我们在弹性搜索集群上设置了一个弹性 OIDC 领域,并使用自定义 Web 应用程序作为依赖方对我们的用户进行身份验证。简而言之,要求先前成功通过身份验证的同一用户通过将浏览器重定向到发送回 AAD 的重定向 Uri (dataset1**),在弹性中再次进行身份验证。但是,当在用户浏览器中完成重定向时,身份验证弹出窗口再次出现,客户端必须 select 用户名才能获得响应。但是,从缓存存储中获取访问令牌并且不再请求密码。
有没有办法避免打开微软认证页面(第二次)并静默获取令牌?我们可以将用户重定向到身份验证页面,但它不应该要求用户单击他们的用户名,并且应该 return 返回带有令牌的应用程序。
数据集 1**
这是我的 angular 代码,它将用户重定向到重定向 uri –
AuthenticateElastic(): void {
this.azureFunctionService.PrepElastic()
.subscribe((authenticationResponse: any) => {
this.dataShareService.setstate(authenticationResponse.state);
this.dataShareService.setnonce(authenticationResponse.nonce);
**document.location.href = authenticationResponse.redirect;**
});
}
为 document.location.href 设置了在 dataset1 之上共享的重定向 URI**,这会重定向用户浏览器并再次出现身份验证弹出窗口。 document.location.href = authenticationResponse.redirect;
客户端询问授权服务器,显示或不显示登录和/或同意屏幕
GET /authorize?...&prompt={none}&
none - 未显示登录或同意
prompt=none参数导致Auth0使用指定的response_mode立即将结果发送给指定的redirect_uri(回调URL),有两种可能响应:成功或错误。
可选场景:
您可能希望避免在用户每次从同一浏览器登录时提示他们进行多重身份验证 (MFA)。为此,请设置一个规则,以便每个会话仅发生一次 MFA。这在执行静默身份验证(提示=none)以在用户会话期间更新 SPA 中的短期访问令牌时非常有用,而不必依赖将 allowRememberBrowser 设置为 true.
参考:配置静默身份验证(auth0.com)
为了静默重定向呼叫,我按照文档 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow 确认通过了两个提示=none&login_hint="my_username@xyz.com”。传递这两个参数可以解决问题。
谢谢