如何解决在Open ID Connect中配置静默身份验证
- 客户类型:水疗中心
- 授予类型:隐式或代码(pkce)
作为用户,如果我已经使用身份提供者登录,则希望能够进行静默身份验证。如果不像来宾用户一样留在客户端。而且,如果我要登录到客户端,则应该可以通过登录页面手动进行身份验证。
这具有手动登录和自动登录方案。您将如何在Open ID Connect中处理此类情况?
如果用户具有有效的会话,则在客户端设置中添加prompt=none
会静默获得新令牌。但是,如果不是这样,我希望用户能够按照他/她的意愿通过登录页面进行手动身份验证。
如果我设置了prompt=none
,则它将永远不会进行任何用户交互,例如身份验证。
标签:静默认证oidc,自动登录,SSO
解决方法
这是一个很深的主题,流程通常是这样的:
经典OIDC解决方案
- 为每个SPA重定向用户
- 如果已经在IDP上登录,则没有登录提示
- OAuth状态存储在本地存储中(尽管建议仅将实际令牌存储在内存中)
- 当访问令牌到期时(或之前),请使用提示=无将iframe令牌续签
- 打开新的浏览器标签后,请进行iframe令牌更新以获取该标签的令牌-以避免完全重定向
- 用户注销后,从本地存储中删除OAuth状态
使用最广泛的库是OIDC Client,它将为您完成很多艰苦的工作。另请参阅我的blog post + code sample,以了解外观。
问题领域
还值得注意的是,默认情况下,2020年Safari浏览器中的iframe静默更新默认情况下不起作用。有关此here的一些注意事项。
,或者,您可以使用signinSilent()
。我已经在登录页面ngOnInit上使用了它(因为AuthGuard无论如何都会将用户重定向到登录名,所以我认为这将是我的理想选择)。
// login.ts
ngOnInit(): void {
this.authService.signinSilent().then(_ => {}).catch(_ => {});
}
// authService
public signinSilent() {
return this.userManager.signinSilent();
}
如果用户已经具有与idp的有效会话,则 signinSilent方法将返回用户对象。否则会引发错误,可能是login_required
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。