我想了解OIDC的混合流程。我是否正确地认为向授权端点发出了身份验证请求,然后授权端点使用URL片段中的授权代码、id令牌和令牌进行响应?
如果是这样的话,如果不能将授权代码交换为访问和id令牌,返回授权代码又有什么意义呢?
3.3.2.5.成功的身份验证响应当使用混合流时,身份验证响应以与第3.2.2.5节定义的隐式流相同的方式进行,但本节中指定的差异除外。这些授权端点结果以下列方式使用:
access_tokenOAuth 2.0访问令牌。当使用的response_type值为code token或code id_token token时,将返回此值。(在相同的情况下,还返回一个token_type值。)id_tokenID令牌。当使用的response_type值为code id_token或code id_token token时,将返回此值。code授权代码。这总是在使用混合流时返回的。以下是使用混合流成功响应的非规范示例(仅用于显示目的的行包装):HTTP/1.1302find:https://client.example.org/cb# code=SplxlOBeZQQYbYS6WxSbIA &id_token=eyJ0 .NiJ9.eyJ1c .I6IjIifX0.ZXso &state=af0ifjsldkj
发布于 2018-09-17 20:51:41
获得刷新令牌的唯一方法是使用auth代码通过令牌端点。就我个人而言,我不会费心使用“代码id_token令牌”,而只是使用“id_token代码”。
发布于 2021-06-14 19:25:04
正如麦基已经提到的,刷新令牌只在令牌端点发出,因此需要授权代码才能获得令牌。如果web应用程序出于某种原因需要URL中的ID令牌,并且需要刷新令牌,则混合流可能满足您的需要。
另一点是混合流的灵活性:根据您的用例和您的OpenID提供程序的能力,您可能希望在URL中使用ID令牌,就像在隐式流中一样,以及令牌端点返回到后端的访问令牌与代码一起请求它。
混合流还允许应用程序获取两个ID令牌:一个在前端具有不太敏感的数据,另一个在后端具有更敏感的数据:
如果从授权端点和令牌端点(
response_type值code id_token和code id_token token的情况)返回ID令牌,则在两个ID令牌中,iss和sub声明值必须是相同的。任何一个中存在的有关身份验证事件的所有声明都应同时出现在这两个声明中。如果任何ID令牌都包含有关最终用户的声明,则两者中存在的任何ID令牌都应该具有相同的值。注意,OP可能选择从授权终结点返回较少的关于最终用户的声明,例如,出于隐私原因。
(摘自3.3.3.6.ID令牌)
这对于访问令牌也是可能的:
如果从授权终结点和令牌终结点(
response_type值code token和code id_token token的情况)返回访问令牌,则它们的值可能是相同的,也可能是不同的。请注意,由于两个端点和生存期的不同安全特性,可能会返回不同的访问令牌,并且对它们授予的资源的访问也可能不同。
(摘自3.3.3.8.存取令牌)
https://security.stackexchange.com/questions/192223
复制相似问题