Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net OpenIDConnect响应类型混淆_Asp.net_Asp.net Web Api_Oauth 2.0_Openid Connect - Fatal编程技术网

Asp.net OpenIDConnect响应类型混淆

Asp.net OpenIDConnect响应类型混淆,asp.net,asp.net-web-api,oauth-2.0,openid-connect,Asp.net,Asp.net Web Api,Oauth 2.0,Openid Connect,在过去的几天里,我阅读了有关OAuth2和OpenIDConnect的所有规范,并使用ThinktectureIdentity Server实现了一个测试客户机。我还学习了几门pluralsight课程,我想我已经理解了它的主要要点。但是,我仍然对响应类型感到非常困惑 OpenIDConnect规范指定混合流响应类型是“代码”、“id_令牌”和“令牌”的组合。我理解“id_令牌”允许我们最初访问基本id信息 我还理解“代码”是指授权代码,“令牌”是指访问令牌,并且将“代码”与另外两个中的一个或两

在过去的几天里,我阅读了有关OAuth2和OpenIDConnect的所有规范,并使用ThinktectureIdentity Server实现了一个测试客户机。我还学习了几门pluralsight课程,我想我已经理解了它的主要要点。但是,我仍然对响应类型感到非常困惑

OpenIDConnect规范指定混合流响应类型是“代码”、“id_令牌”和“令牌”的组合。我理解“id_令牌”允许我们最初访问基本id信息

我还理解“代码”是指授权代码,“令牌”是指访问令牌,并且将“代码”与另外两个中的一个或两个组合会触发流,但我的理解是,您可以在授权流中将授权代码交换为访问令牌,而隐式流隐式地提供访问代码


有人能帮我澄清一下吗?

您关于授权代码流和隐式流的想法是正确的。 但我认为你把混合流程复杂化了。当使用混合时,你只需简单地获得代码和id_令牌即可


之后,您可以获取代码并将其交换为访问令牌,或者直接使用id_令牌(或访问令牌)。这两种方法都有各自的缺陷,尤其是在安全性方面。

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

  • code
    指授权码
  • 令牌
    指访问令牌或(
    访问令牌
  • 在授权代码流中,可以切换访问令牌的代码
但你的困惑可能部分源于术语混淆:

  • 术语授权流并不完全正确;它的正式名称是授权代码流
  • 术语访问代码不存在
  • 隐式流没有授权代码(或访问代码),事实上根本不涉及允许客户端从令牌端点获取令牌的凭证(或授权),因此它的名称为
正如@juanifioren所指出的,混合流结合了以下因素:

  • code-id\u令牌
    流将直接在身份验证响应中获取
    code
    id\u令牌
    ,但您将使用
    code
    从令牌端点获取
    access\u令牌
  • code-token
    流将直接在身份验证响应中获得
    code
    access\u-token
    ,但您将使用
    code
    从令牌端点在后端获得
    id\u-token
    和另一个
    access\u-token
  • code-id\u-token-token
    流将在身份验证响应中直接获得
    code
    access\u-token
    id\u-token
    ,并且您可以使用后端的
    code
    从令牌端点获得另一个
    访问\u-token
从令牌端点获取
access\u令牌
与从授权端点获取令牌不同,因为机密客户端向令牌端点(而不是授权端点)进行身份验证。因此,客户端机密部分的
访问\u令牌
可能具有更多权限或更长的使用寿命


另请参阅spec邮件列表中有关此主题的短线程:

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

公共静态只读字典响应PetlograntTypeMapping=新字典
{
{OidcConstants.ResponseType.Code,GrantType.AuthorizationCode},
{OidcConstants.ResponseType.Token,GrantType.Implicit},
{OidcConstants.ResponseType.IdToken,GrantType.Implicit},
{OidcConstants.ResponseType.IdTokenToken,GrantType.Implicit},
{OidcConstants.ResponseType.CodeIdToken,GrantType.Hybrid},
{OidcConstants.ResponseType.CodeToken,GrantType.Hybrid},
{OidcConstants.ResponseType.CodeIdTokenToken,GrantType.Hybrid}
};

6.响应类型=代码令牌

当response_type的值为code token时,一个授权码 以及从授权端点发出的访问令牌,以及 访问令牌是从令牌端点发出的。此外,如果 包含在范围请求参数中,则从 令牌端点也是如此

授权端点和令牌端点都发出访问权限 令牌,但访问令牌的内容并不总是相同的。 关于这一点,OpenID Connect Core 1.0中的“3.3.3.8.访问令牌” 声明如下:

如果从两个授权端点返回访问令牌 和来自令牌端点,这是响应类型的情况 值code token和code id_token token,它们的值可以是 相同或不同。请注意,不同的访问令牌可能 由于不同的安全特性而返回 两个端点以及由授予的生命周期和对资源的访问 它们也可能不同


感谢您澄清术语-我仍然不确定为什么我需要从
令牌\u端点
获得第二个
访问令牌
?会吗,因为我可能有一个应用程序可以同时使用这两个流?是的,如果您的应用程序能够同时使用这两个流,那么它可以获得两个访问令牌;它可能会选择这样做,因为它更信任反向通道流FrontChannel另一个原因是刷新令牌仅在后通道上发布。您永远不会使用隐式流获得刷新令牌,因此在混合流期间从授权端点返回的令牌也应该如此。您所说的“co”是正确的
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 }
        };