我正在尝试使用OpenID Connect为我的应用程序创建SSO。基本上,我们有一个API层,不同的应用程序(客户端)将消耗此层的服务。首先,我们为每个不同的应用程序添加了OAuth2.0进行授权;对于身份验证,我们目前使用自己的数据库(IDP)。我们希望最终用户在这个流程中有一个单一的登录体验。为了实现这一点,我们在我们已经构建的OAuth流程之上添加了OpenID。Web服务器具有标准的OAuth + OpenID实现,并具有以下功能:显式流、隐式流和密码授权。在添加OpenID Connect之后,服务器现在可以根据范围和请求类型发送id_token(jwt)。注册了两个客户端(C1和C2)。步骤1:C1遵循显式流并使用响应类型作为代码,因此当用户(U1)访问C1时,它会被重定向到认证服务器,其中U1输入凭据。步骤2:授权服务器验证凭据并提示用户同意,确认后将代码发送到C1的redirect_uri。
步骤3:C1请求令牌,服务器发放access_token和id_token;access_token存储在数据库中。
步骤4:现在U1需要访问C2。
问题:
- C2从api服务器获取access_token的最佳方式/实践是什么,而不需要用户重新登录? - 如果C1通过本地存储或其他方式传递jwt id_token到C2,一种可能的方法是按照this交换id_token以获得access_token。 - 如果我们采用上述方法,只验证id_token并发放access_token是否足够,还是应该添加其他检查? - 任何其他方法。
谢谢。
步骤3:C1请求令牌,服务器发放access_token和id_token;access_token存储在数据库中。
步骤4:现在U1需要访问C2。
问题:
- C2从api服务器获取access_token的最佳方式/实践是什么,而不需要用户重新登录? - 如果C1通过本地存储或其他方式传递jwt id_token到C2,一种可能的方法是按照this交换id_token以获得access_token。 - 如果我们采用上述方法,只验证id_token并发放access_token是否足够,还是应该添加其他检查? - 任何其他方法。
谢谢。