【发布时间】:2019-01-20 07:15:42
【问题描述】:
我正在尝试使用 openid connect 为我的应用程序创建 SSO。
基本上我们有一个 API 层,不同的应用程序(客户端)将使用该层的服务。
首先,我们为每个不同的应用添加了 OAuth2.0 授权;对于身份验证,我们目前正在使用我们自己的数据库 (IDP)
我们希望最终用户在此流程中拥有单点登录体验。 为此,我们在已构建的 OAuth 流程之上添加了 openid。
Web 服务器具有标准的 oauth + openid 实现,并具有以下功能
- 显式流
- 隐式流
- 密码授予
添加 openid 连接后,服务器现在也可以发送 id_token (jwt),具体取决于范围和请求类型
注册了两个客户端(C1 & C2)
第 1 步:C1 遵循显式流程并使用响应类型作为代码,因此当用户 (U1) 访问 C1 时,它会被重定向到 U1 输入凭据的身份验证服务器。
第2步:授权服务器验证凭据并提示用户同意,确认将代码发送到C1的redirect_uri
步骤3:C1然后请求token,服务器给出access_token和id_token;访问令牌被持久化在数据库中
第 4 步:U1 现在需要访问 C2
问题:
- C2 在无需用户再次登录的情况下从 api 服务器获取访问令牌的最佳方式/实践是什么。
- 如果 C1 通过本地存储或任何其他方式将 jwt id_token 传递给 C2,一种可能的方法是将 id_token 交换为 this 之后的 access_token。
- 如果我们采用上述方法,是否只需验证 id_token 并发出 access_token 就足够了,还是应该添加任何其他检查
- 任何其他方法。
谢谢
【问题讨论】:
标签: security oauth-2.0 openid-connect