asp.net - OpenIDConnect 响应类型混淆

标签 asp.net asp.net-web-api oauth-2.0 openid-connect

在过去的几天里,我一直在阅读有关 OAuth2 和 OpenIDConnect 的所有规范,并使用 Thinktecture Identity Server 实现了一个测试客户端。我还学习了几门复数类(class),我认为了解它的主要要点。但是,我仍然对响应类型感到非常困惑。

OpenIDConnect 规范指定混合流响应类型是“code”、“id_token”和“token”的组合。我了解“id_token”允许我们最初访问基本的 id 信息。

我也理解代码”是指授权代码,“ token ”是指访问 token ,将“代码”与其他两个中的一个或两个组合触发流程,但我的理解是您将授权代码交换为访问 token 授权流程,而隐式流程隐式提供访问代码?

有人能解决我的困惑吗?

最佳答案

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

  • code指授权码
  • token指访问 token 或 ( access_token )
  • 在授权码流程中,切换 code对于 access_token

  • 但是您的部分困惑可能源于术语混淆:
  • 术语授权流程并不完全正确;它的正式名称是授权码流
  • 术语访问代码不存在
  • 隐式流没有授权代码(也没有访问代码),实际上根本不涉及允许客户端从 token 端点获取 token 的凭证(或授权),因此它的名称是

  • 正如@juanifioren 指出的,混合流结合了以下几点:
  • code id_token flow 会得到一个 codeid_token直接在身份验证响应中,但您将使用 code获得 access_token来自 token 端点
  • code token flow 会得到一个 codeaccess_token直接在身份验证响应中,但您将使用 code获得 id_token可能还有另一个 access_token在来自 token 端点的后端
  • code id_token token flow 会得到一个 code , access_token和一个 id_token直接在身份验证响应中 您可以使用 code在后端获取 另一个 access_token来自 token 端点

  • 获取 access_token从 token 端点获取它不同于从授权端点获取它,因为 secret 客户端向 token 端点(而不是授权端点)验证自己。因此 access_token对于客户端的 secret 部分,可能有更多的权限和或更长的生命周期。

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

    关于asp.net - OpenIDConnect 响应类型混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29275477/

    相关文章:

    c# - 具有自定义端点名称的 WEB API .NET 操作

    oauth-2.0 - 使用承载 token 的MVC 5 Identity 2和Web API 2授权和调用api

    c# - 限制对特定关系的访问 OData .NET WebAPI

    c# - 使用命名空间

    regex - 使用正则表达式进行 ASP.NET Web API 2 模型验证

    php - 如何从此 Android 应用程序获取此 Google 登录 ID token 以验证服务器端?

    具有 OAuth 2 资源所有者密码凭证的 Java scribe 客户端

    asp.net - ASP.NET 报告系统

    ASP.NET MVC 5 引导文本框宽度大小

    c# - 如何从 SQL 查询返回动态对象