Session 使用OAuth和JWT进行身份验证,但不使用OpenID Connect

Session 使用OAuth和JWT进行身份验证,但不使用OpenID Connect,session,authentication,oauth,authorization,openid-connect,Session,Authentication,Oauth,Authorization,Openid Connect,我想知道我是否真的需要OpenID Connect在OAuth2之上提供身份验证。在我看来,如果我生成JWTs(JWE)作为我的访问令牌,并将用户声明、角色/权限等存储在访问令牌中,那么就不需要OpenID Connect的id令牌。资源服务器可以在每个请求上验证访问令牌。或者,我可以让访问令牌保持较小,让它存储会话id,并用声明/角色/权限填充该会话。此外,我还可以在会话中设置过期值,支持滑动过期等,甚至不需要处理刷新令牌。我是否错过了OpenID Connect的真正意义 更新 我刚刚意识到

我想知道我是否真的需要OpenID Connect在OAuth2之上提供身份验证。在我看来,如果我生成JWTs(JWE)作为我的访问令牌,并将用户声明、角色/权限等存储在访问令牌中,那么就不需要OpenID Connect的id令牌。资源服务器可以在每个请求上验证访问令牌。或者,我可以让访问令牌保持较小,让它存储会话id,并用声明/角色/权限填充该会话。此外,我还可以在会话中设置过期值,支持滑动过期等,甚至不需要处理刷新令牌。我是否错过了OpenID Connect的真正意义

更新


我刚刚意识到我需要澄清一下我的问题。如果我建立了一个允许用户通过谷歌登录的网站,我就会明白OpenID连接是多么必要。我允许某人基于OAuth授权流访问我的站点,这并不能证明身份验证已经发生。但是,如果我正在构建一组服务,并且我只想发布令牌来访问这些服务资源,OAuth还不够吗?如果我希望这些令牌包含角色/声明,这样我就可以在我的服务中做出授权决策,那么包含角色/声明的JWT还不够吗?如果您觉得在这种情况下不需要OpenID Connect。

通过要求访问令牌是JWT,同意进入JWT的用户声明,将到期/发行时间戳放入其中,并确保您以加密方式验证令牌的发行人,您实际上正在执行与OpenID Connect相同的操作:“分析”OAuth 2.0,以便它能够提供用户身份验证/身份信息

更新:


但是,如果不需要用户身份验证语义,可以使用OAuth2.0。您可以使用JWT作为访问令牌,这样资源服务器(API)就可以验证和检查访问令牌,并找出客户端代表谁行事。但请注意,拥有该令牌并不意味着用户当时在场(并经过身份验证)。

谢谢您的回答!我刚刚意识到我需要澄清一下我的问题。如果我建立了一个允许用户通过谷歌登录的网站,我就会明白OpenID连接是多么必要。我允许某人基于OAuth授权流访问我的站点,这并不能证明身份验证已经发生。但是,如果我正在构建一组服务,并且我只想发布令牌来访问这些服务资源,OAuth还不够吗?如果我想让这些令牌包含角色/声明,这样我就可以在我的服务中做出授权决策,那么JWT还不够吗?这听起来确实像是标准的OAuth 2.0,客户端向资源服务器(=API)提供结构化的JWT,API知道如何验证令牌并在其中使用声明。它不提供身份验证,但允许授权访问客户端。谢谢,这是我等待的确认。我的同事希望引入OpenID Connect,让API使用id_令牌。我认为这是因为他们认为声明属于id_令牌(由规范支持),而不属于访问令牌(OAuth未定义)。但是,既然OpenID连接,依赖方(OAuthClient)是唯一消耗IDL令牌的,那么我们就必须考虑我们的API RPS了!!这似乎是对OpenID Connect要解决的问题的误解。如果您更新您的答案,确认OAuth+JWT足以满足我的场景,并且包含声明的JWT可以用作访问令牌,我可以接受。再次感谢!