OAuth2.0和OpenID Connect令人困惑

时间:2018-07-17 21:11:48

标签: oauth-2.0 openid-connect

对于使用OAuth 2.0作为授权方法和使用OpenID Connect作为身份验证方法感到困惑。

根据我的知识, OAuth 2.0 只是一种授权方法。换句话说,这是一个请求ACCESS_TOKEN并接收该ACCESS_TOKEN的过程,如下图黄色椭圆所示:(简化)

enter image description here

在OAuth 2.0客户端从授权服务器检索ACCESS_TOKEN之前,该服务器应验证用户是否允许它,并且这是OAuth 2.0并不关心的身份验证过程。

当混合中包含OpenID Connect时,它也允许使用身份验证方法,但据我所知,OpenID Connect只是在JWT令牌中添加了一个“声明”,其中包含有关使用该服务的用户的信息,例如:email ,姓名和其他人。

我的问题是:

  1. 为什么不忽略OpenID Connect,而只是在OAuth中添加更多“声明” 2.0以获取有关用户的信息?
  2. 我对流程的描述正确吗?

2 个答案:

答案 0 :(得分:3)

我不知道您的方法是否可行,但是您完全可以自由进行自己的身份验证。毕竟,这是Facebook,GitHub和许多其他人通过自定义oauth2所做的。最终出现了太多的oauth2“身份验证”方法,如果您想更改提供程序,它永远不会即插即用。我相信这就是引入OpenID connect的原因-一种建立在已建立的用于授权的oauth2模式的同时进行连接和推理的常见方法。使用OpenID connect还是不使用...但是,如果您不使用,则会重新发明轮子。

答案 1 :(得分:2)

@sdoxee答案正确解释了事情。但是我要添加一些更多信息,以使OP理解。

如今,许多身份提供者(例如:Azure AD)发布基于JWT的访问令牌。这些JWT访问令牌确实包含有关最终用户的声明以及与JWT相关的验证详细信息(例如:令牌过期)。这是Azure AD O Auth 2 success response的链接,该链接突出显示了要成为JWT的访问令牌。另外,请参见JWT claims以了解他们如何解释权利要求。示例如下,

  

f amily_name :用户的姓氏或名字。应用程序可以显示该值。

     

用户名:用户的名字。应用程序可以显示该值。

人们可以考虑在访问令牌中存在的声明上建立身份验证,但这不符合协议。多数索赔和信息将取决于实施者。同样,根据协议定义,这两个令牌(访问和ID)具有两个不同的受众。 ID令牌用于客户端,验证和身份验证。访问令牌用于OAuth 2受保护的端点。

再次,如@sdoxee突出显示,在正确的位置使用正确的协议。在访问令牌中拥有声明并不一定意味着您应该使用它们进行身份验证。