【发布时间】:2021-03-11 01:35:31
【问题描述】:
我有一个带有 REST API 的系统。 REST API 的用户应该能够使用 OpenID Connect over Oauth2 进行身份验证。系统本身有自己的权限系统。我需要将 IDPs 用户映射到我的本地权限系统。我正在考虑将本地数据库中的 openid 范围 sub 键保存为唯一的用户标识符。
但是我应该在 API 中将哪个令牌返回给用户。它应该是来自 OpenID Connect 层的 oauth2 访问 id 还是 token_id,还是两者兼而有之?
所以我为 API 的最终用户看到了这些替代方案:
Authorization: Bearer <access_id>
Authorization: Bearer <token_id>
Authorization: Bearer <access_id>
TokenID: <token_id>
如果不将 token_id/access_id 保留在系统中,我需要根据 API 请求从客户端获取此信息。令牌 ID 包含 JWT 声明(子),因此我需要它来验证客户端可以在我的系统中执行的操作。
我是否需要将以下任何 ID 存储在我的本地数据库中以验证 API 请求,还是应该由用户提供?
- 刷新令牌?
- 访问令牌?
- 令牌 ID?
我基本上是在身份验证和用户识别之后。我不是在访问除此之外的任何外部资源之后。
最后一个问题。我是否需要验证对 IDP 的每个请求的访问令牌还是可以缓存它?使用 OpenID Connect 时是否需要同时验证访问令牌和令牌 ID?
编辑:
我的系统本身有一个 REST API 和它自己的权限系统。权限系统使用任何使用 OpenID Connect 的身份验证系统提供的用户 ID。第一个用户是手动添加到权限系统的。
思路:
- 我的系统用户请求https://mysystem/login
- 用户被重定向到https://idp/auth
- IDP 将成功登录重定向到https://mysystem/callback 我的系统从令牌 ID JWT 获取用户 ID (sub) 和电子邮件。
- 然后使用访问令牌(不是 OIDC 令牌 ID)返回给用户。
- 用户现在可以执行: curl -H "Authorization: Bearer 访问令牌”https://mysytem/some/resource
- Mysytem 从用户那里得到这个请求,但不知道如何将访问令牌映射到数据库中的用户 ID,而无需向 IDP 询问用户 ID。
我想使用外部 IDP 让用户登录,而不是从 3rd 方系统访问资源。
【问题讨论】:
标签: rest oauth oauth-2.0 openid openid-connect