Authentication 在开放ID连接中配置静默身份验证 客户类型:Spa 授予类型:隐式或代码(pkce)

Authentication 在开放ID连接中配置静默身份验证 客户类型:Spa 授予类型:隐式或代码(pkce),authentication,single-sign-on,openid-connect,oidc-client-js,Authentication,Single Sign On,Openid Connect,Oidc Client Js,作为一个用户,如果我已经使用我的身份提供者登录,我希望能够获得静默身份验证。如果不是,请像来宾用户一样留在客户端。如果我想登录到客户端,我应该能够通过登录页面手动获得身份验证 这有手动登录和自动登录两种情况。在Open ID Connect中,您将如何处理此类情况 通过在客户端设置中添加prompt=none,如果用户具有有效会话,则将以静默方式获取新令牌。但如果不是,我希望用户能够根据自己的意愿通过登录页面进行手动身份验证 如果我设置了prompt=none,这将永远不会有任何用户交互,例如身

作为一个用户,如果我已经使用我的身份提供者登录,我希望能够获得静默身份验证。如果不是,请像来宾用户一样留在客户端。如果我想登录到客户端,我应该能够通过登录页面手动获得身份验证

这有手动登录和自动登录两种情况。在Open ID Connect中,您将如何处理此类情况

通过在客户端设置中添加
prompt=none
,如果用户具有有效会话,则将以静默方式获取新令牌。但如果不是,我希望用户能够根据自己的意愿通过登录页面进行手动身份验证

如果我设置了
prompt=none
,这将永远不会有任何用户交互,例如身份验证


标签:静默身份验证oidc、自动登录、SSO这是一个非常深入的主题,流程通常如下所示:

经典OIDC解决方案

  • 为每个SPA重定向用户
  • 如果已在IDP登录,则不会出现登录提示
  • OAuth状态存储在本地存储中(尽管建议仅在内存中存储实际令牌)
  • 当访问令牌过期(或之前)时,请执行iframe令牌续订,并提示=none
  • 打开新的浏览器选项卡时,执行iframe令牌更新以获取该选项卡的令牌-以避免完全重定向
  • 当用户注销时,从本地存储中删除OAuth状态
最广泛使用的图书馆是,它将为您做很多艰苦的工作。另请参见my,了解其视觉效果

问题领域


另外值得注意的是,2020年Safari浏览器默认情况下,iframe静默更新不起作用。关于这方面的一些注意事项。

或者,您可以使用
signinSilent()
。我在我的登录页面ngOnInit上使用了它(因为AuthGuard无论如何都会将用户重定向到登录,我认为它将是我的场景中的完美位置)


如果用户已经与idp有一个有效的会话,那么signInselent方法将返回用户对象。否则它将抛出一个错误,可能是
login\u required

Ohhhh。谢谢你提到的问题领域。是否有任何解决方法。此外,我无法使用refresh_token grant flow,因为我们的身份服务器在请求中需要客户端id和机密身份验证头。但OIDC未将其发送为客户端有秘密,未通知。
// login.ts
ngOnInit(): void {
    this.authService.signinSilent().then(_ => {}).catch(_ => {});
}

// authService
public signinSilent() {
    return this.userManager.signinSilent();
}