使用 OAuth 和 JWT 但不使用 OpenID Connect 进行身份验证
Authentication with OAuth and JWT but without OpenID Connect
我想知道我是否真的需要 OpenID Connect 在 OAuth2 之上提供身份验证。在我看来,如果我生成 JWT (JWE) 作为访问令牌并将用户声明、roles/permissions 等存储在访问令牌中,则不需要 OpenID Connect 的 ID 令牌。资源服务器可以在每个请求上验证访问令牌。或者,我可以保持访问令牌较小,只让它存储一个会话 ID 并用 claims/roles/permission 填充该会话。我也可以在会话中放置一个过期值并支持滑动过期等,甚至不处理刷新令牌。我是否错过了 OpenID Connect 的真正含义?
更新
我刚刚意识到我需要澄清一下我的问题。如果我构建了一个允许用户通过 Google 登录的站点,我就会明白 OpenID Connect 是多么必要。我允许某人基于一些 OAuth 授权流程访问我的网站,但不能证明身份验证已发生。但是,如果我正在构建一堆服务,而我只想颁发令牌来访问这些服务资源,那么 OAuth 还不够吗?如果我希望这些令牌包含 roles/claims 以便我可以在我的服务中做出授权决定,那么包含 roles/claims 的 JWT 还不够吗?如果感觉在这种情况下不需要 OpenID Connect。
通过要求访问令牌是 JWT,就进入 JWT 的用户声明达成一致,在其中放置 expiration/issuance 时间戳,并确保您以加密方式验证令牌的颁发者实际上,我们正在做与 OpenID Connect 所做的完全相同的事情:"profiling" OAuth 2.0,它可以提供用户 authentication/identity 信息。
更新:
但是如果您不需要用户身份验证语义,您可以坚持使用 OAuth 2.0。您可以使用 JWT 作为访问令牌,以便资源服务器 (API) 可以验证和检查访问令牌并找出客户端代表谁执行操作。但请注意,拥有该令牌并不意味着用户当时在场(并经过身份验证)。
我想知道我是否真的需要 OpenID Connect 在 OAuth2 之上提供身份验证。在我看来,如果我生成 JWT (JWE) 作为访问令牌并将用户声明、roles/permissions 等存储在访问令牌中,则不需要 OpenID Connect 的 ID 令牌。资源服务器可以在每个请求上验证访问令牌。或者,我可以保持访问令牌较小,只让它存储一个会话 ID 并用 claims/roles/permission 填充该会话。我也可以在会话中放置一个过期值并支持滑动过期等,甚至不处理刷新令牌。我是否错过了 OpenID Connect 的真正含义?
更新
我刚刚意识到我需要澄清一下我的问题。如果我构建了一个允许用户通过 Google 登录的站点,我就会明白 OpenID Connect 是多么必要。我允许某人基于一些 OAuth 授权流程访问我的网站,但不能证明身份验证已发生。但是,如果我正在构建一堆服务,而我只想颁发令牌来访问这些服务资源,那么 OAuth 还不够吗?如果我希望这些令牌包含 roles/claims 以便我可以在我的服务中做出授权决定,那么包含 roles/claims 的 JWT 还不够吗?如果感觉在这种情况下不需要 OpenID Connect。
通过要求访问令牌是 JWT,就进入 JWT 的用户声明达成一致,在其中放置 expiration/issuance 时间戳,并确保您以加密方式验证令牌的颁发者实际上,我们正在做与 OpenID Connect 所做的完全相同的事情:"profiling" OAuth 2.0,它可以提供用户 authentication/identity 信息。
更新:
但是如果您不需要用户身份验证语义,您可以坚持使用 OAuth 2.0。您可以使用 JWT 作为访问令牌,以便资源服务器 (API) 可以验证和检查访问令牌并找出客户端代表谁执行操作。但请注意,拥有该令牌并不意味着用户当时在场(并经过身份验证)。