【问题标题】:IdentityServer Flows身份服务器流
【发布时间】:2015-06-23 09:14:50
【问题描述】:

IdentityServer 支持在 Flows 枚举中定义并为客户端设置的不同 OpenId Connect 流。还有每种类型的流的示例以及文档中对它们的许多引用,但我找不到documentation 中流的简单定义列表,好像它们太明显而无法用语言解释。但我想他们不是。您能否详细说明它们的区别,也许我们可以将其添加到文档中?

那么什么是:隐式流程、资源所有者密码凭证流程、授权码流程、客户端凭证流、自定义授权流和混合流?还有哪些是 OAuth 流,哪些是 OpenID Connect 流?

谢谢!

【问题讨论】:

    标签: oauth-2.0 openid thinktecture-ident-server openid-connect identityserver3


    【解决方案1】:

    我遇到了同样的问题,目前工作仍在进行中。当我完成文档时,我可能会在这里发布。暂时:请检查草稿:

    Enrich IdentityServer Documentation with OIDC and OAuth2 Flows section #73

    更新: OIDC and OAuth2 Flows

    【讨论】:

    【解决方案2】:

    来自 leastPrivilage 的第一个链接:Aharon Paretzki's OAuth 2 Simplified

    流程决定ID令牌(即授权码)和访问令牌(即'令牌')返回给客户端:

    授权码流程:OAuth 2.0流程在其中

    • 从授权端点返回一个授权码
    • 所有令牌(作为第二阶段,以换取授权码)都从令牌端点返回
    • 用于可以维护其客户端机密机密性的基于服务器的调用 (API)。允许更强的安全性,只要没有人可以访问“客户端密码”。

    隐式流:OAuth 2.0 流,其中

    • 所有令牌都直接从授权端点返回
    • 既不使用令牌端点也不使用授权码。
    • 用于移动和基于 Web 的应用程序,无法维护客户端机密的机密性,因此需要由身份验证服务器本身颁发令牌。这不太安全,建议将服务器设置为拒绝 API 使用的 隐式流 调用,并仅允许基于浏览器和基于移动的应用程序调用。

    混合流:OAuth 2.0 流,其中

    • 从授权端点返回一个授权码,
    • 一些令牌直接从授权端点返回,而其他令牌则从令牌端点返回(作为第二阶段,以换取授权代码)。
    • 在需要两个流的地方使用。

    【讨论】:

      【解决方案3】:

      查看规格 - 已经全部记录下来了:

      http://openid.net/specs/openid-connect-core-1_0.htmlhttps://www.rfc-editor.org/rfc/rfc6749

      此外,我最近还写了一个总结,针对不同的应用程序类型对其进行了细分:

      http://leastprivilege.com/2016/01/17/which-openid-connectoauth-2-o-flow-is-the-right-one/

      【讨论】:

      • 我知道,但我正在寻找更简短的描述。我发现您博客中的this 描述非常有用。
      • 我还发现这是 Identity Server 的最大问题,因为关于产品的基本信息有限。实施该框架大约一个月后,极其详细的文档将被证明是有用的,但学习曲线并不陡峭,而是垂直的。
      • 我实际上通过 Auth0.com 实施文档了解了更多关于 Identity Server 的信息,然后又回到了 Identity Server。
      • 请随意写下所有内容并让我们知道,以便我们可以链接到它。它不是产品,它是 OSS。呻吟很容易。自己改进。
      • 你是对的。我不应该抱怨。这是一个很好的资源,希望我能做出贡献。
      【解决方案4】:

      OAuth2 中定义的流只是客户端从身份提供者服务器接收access token 的几种方式;在这种情况下,IdentityServer。除非您完全理解the flow diagrams 中指定的实体,例如Resource OwnerUser AgentResource Server,否则理解流并不容易。在here 中有一些关于这些实体(角色,珍贵)的简要说明。


      授权代码流程:在发出access token之前发出authorization code

      • 客户端请求authorization code.
      • IdentityServer 验证客户端并要求资源所有者授予发出authorization code 的授权。
      • 然后客户端使用给定的authorization code 请求access token
      • 授权服务器直接向客户端发出access token

      隐式代码流:即使没有提供authorization code,也会发出access token

      • 客户端直接请求access token
      • IdentityServer 跳过验证客户端(在某些情况下,它会部分验证)但仍要求资源所有者授予发出access token 的授权
      • 此流程从不发出authorization code

      隐式流被认为是使用javascript等脚本语言的客户端的理想流,因为客户端不必分别请求authorization codeaccess token,在反过来,为客户端减少了一次网络往返。


      客户端凭据流:在未经资源所有者许可的情况下发出access token

      • 客户端直接请求访问令牌。
      • IdentityServer 验证客户端并立即发出access token

      当客户端也是资源所有者时这是理想的,因此它不需要任何授权权限一直到access token


      资源所有者流程:如果客户端拥有资源所有者的凭据(例如 Id / 密码),则发出 access token

      • 客户端直接请求access token
      • IdentityServer 验证客户端并检查资源所有者的身份。
      • 如果有效,客户端会立即获得access token

      此流程非常适合您认为与他们共享 ID 和密码绝对安全的客户。


      混合流(OIDC 流):发出authorization codeaccess token

      这是Authorization code flowImplicit code flow 的组合。这就是为什么它被称为Hybrid


      自定义流程

      这实际上是一个可定制的流程。除了OAuth2 中的所有协议规范之外,当您的业务需要特定的身份验证/验证流程时,可以使用此功能。

      IdentityServer 很清楚这种情况,它通过设计支持可扩展性。工厂模式、装饰器模式和 IoC / DI 将使您更容易在 IdentityServer 上实现附加功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-25
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        • 2020-09-22
        • 2012-11-18
        相关资源
        最近更新 更多