OpenIDConnect响应类型混淆

RND*_*hts 12 asp.net oauth-2.0 asp.net-web-api openid-connect

我花了最近几天阅读有关OAuth2和OpenIDConnect的所有规范,并使用Thinktecture Identity Server实现测试客户端.我也遵循了几个复数课程,我认为理解它的主要要点.但是我仍然对响应类型非常困惑.

OpenIDConnect规范指定混合流响应类型是"code","id_token"和"token"的组合.我理解"id_token"允许我们最初访问基本的id信息.

我也理解代码"是指授权代码,而"令牌"是指访问令牌,并将"代码"与其他两个触发器中的一个或两个相结合,但我的理解是你交换了访问令牌的授权代码授权流程,而隐式流程隐式提供访问代码?

有人能解决我的困惑吗?

Han*_* Z. 17

您所做的以下陈述是正确的:

  • code 是指授权码
  • token是指访问令牌或(access_token)
  • 在授权代码流程中,一个code用于切换access_token

但是你的一部分困惑可能源于术语混淆:

  • 授权流程这个术语并不完全正确; 它的正式名称是授权码流程
  • "访问代码"一词不存在
  • Implicit流没有授权代码(也没有访问代码),实际上根本没有涉及允许客户端从令牌端点获取令牌的凭证(或授权),因此它的名称

正如@juanifioren所指出的,Hybrid流程结合了以下内容:

  • code id_token流程会得到一个codeid_token直接在认证响应,但你会用code得到一个access_token来自令牌端点
  • code token流程会得到一个codeaccess_token直接在认证响应,但你会用code得到一个id_token和另一个可能access_token从令牌端点后端
  • code id_token token流程会得到一个code,access_token以及id_token在认证响应直接您可以使用code在后端得到另一个 access_token来自令牌端点

access_token从令牌端点获取一个与从授权端点获取一个端口不同,因为机密客户端将自己验证到令牌端点(而不是授权端点).因此,access_token对于客户机密部分可能具有更多权限和更长寿命.

另请参阅规范邮件列表中有关此主题的简短帖子:http://lists.openid.net/pipermail/openid-specs-ab/Week-of-Mon-20150209/005229.html


MiF*_*vil 8

要了解响应类型和授权类型之间的可能关系,请参阅IdentityServer4\Constants.cs

public static readonly Dictionary<string, string> ResponseTypeToGrantTypeMapping = new Dictionary<string, string>
        {
            { OidcConstants.ResponseTypes.Code, GrantType.AuthorizationCode },
            { OidcConstants.ResponseTypes.Token, GrantType.Implicit },
            { OidcConstants.ResponseTypes.IdToken, GrantType.Implicit },
            { OidcConstants.ResponseTypes.IdTokenToken, GrantType.Implicit },
            { OidcConstants.ResponseTypes.CodeIdToken, GrantType.Hybrid },
            { OidcConstants.ResponseTypes.CodeToken, GrantType.Hybrid },
            { OidcConstants.ResponseTypes.CodeIdTokenToken, GrantType.Hybrid }
        };
Run Code Online (Sandbox Code Playgroud)