在过去的几天里,我阅读了关于OAuth2和OpenIDConnect的所有规范,并使用Thinktecture Identity Server实现了一个测试客户端。我也参加了几个多视觉课程,我想我理解它的主要要点。然而,我仍然非常困惑的React类型。
OpenIDConnect规范指定混合流响应类型是“code”、“id_token”和“token”的组合。我理解“id_token”允许我们最初访问基本的ID信息。
我也理解“代码”指的是授权代码,“令牌”指的是访问令牌,将“代码”与其他两个中的一个或两个组合会触发流程,但我的理解是,您在授权流程中将授权代码交换为访问令牌,而隐式流程隐式提供访问代码?
有人能帮我理清头绪吗?
4条答案
按热度按时间qyswt5oh1#
你所做的以下陈述是正确的:
code
是指授权码token
是指访问令牌或(access_token
)code
切换为access_token
但您的部分困惑可能源于术语混淆:
正如@juanifioren指出的那样,混合流将合并的东西结合在一起:
code id_token
流将直接在身份验证响应中获取code
和id_token
,但您将使用code
从令牌端点获取access_token
code token
流将直接在身份验证响应中获取code
和access_token
,但您将使用code
从令牌端点在后端获取id_token
和可能的另一个access_token
code id_token token
流将直接在身份验证响应中获得code
、access_token
和id_token
,您可以使用后端的code
从令牌端点获得另一个access_token
从Token端点获取
access_token
与从Authorization端点获取access_token
不同,因为机密客户端向Token端点(而不是向Authorization端点)进行身份验证。因此,用于客户端机密部分的access_token
可能具有更多权限和/或更长的寿命。另请参阅规范邮件列表中关于此主题的简短帖子:http://lists.openid.net/pipermail/openid-specs-ab/Week-of-Mon-20150209/005229.html
jbose2ul2#
要了解响应类型和授权类型之间的可能关系,请参见IdentityServer4\Constants.cs
yks3o0rb3#
你对授权代码流和隐式流的想法是正确的。但我认为你把混合流弄得太复杂了。当你使用hybrid的时候,你可以简单地同时得到code和id_token。
之后,您可以抓取代码并将其交换为访问令牌,或者直接使用id_token(或访问令牌)。这两种方法都有自己的缺陷,特别是在安全性方面。
vhmi4jdf4#
https://medium.com/@darutk/diagrams-of-all-the-openid-connect-flows-6968e3990660#9401
6. response_type=code token
当response_type的值为code token时,从授权端点发出授权码和访问令牌,从令牌端点发出访问令牌。此外,如果openid包含在scope请求参数中,则也会从令牌端点发出ID令牌。
授权端点和令牌端点都会发出访问令牌,但访问令牌的内容并不总是相同的。对此,“3.3.3.8. OpenID Connect Core 1.0中的“Access Token”如下:
如果从授权端点和令牌端点返回访问令牌,这是response_type值code token和code id_token token的情况,它们的值可能相同或不同。请注意,由于两个端点的安全特性不同,可能会返回不同的访问令牌,并且它们授予的生存期和对资源的访问权限也可能不同。