IdentityServer流程

时间:2015-04-16 18:55:32

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:38)

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

Enrich IdentityServer Documentation with OIDC and OAuth2 Flows section #73

更新: OIDC and OAuth2 Flows

答案 1 :(得分:19)

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

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

授权代码流:OAuth 2.0流程

  • 从授权端点
  • 返回授权码
  • 并且从令牌端点返回所有令牌(作为第二阶段,以换取授权码)
  • 用于基于服务器的调用(API),可以保持其客户端机密的机密性。只要没有人可以访问“客户端密钥”,就可以提高安全性。

隐含流:OAuth 2.0流程

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

混合流程:OAuth 2.0流程

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

答案 2 :(得分:9)

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

http://openid.net/specs/openid-connect-core-1_0.htmlhttp://tools.ietf.org/html/rfc6749

此外,我最近编写了一份摘要,针对不同的应用类型对其进行了细分:

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

答案 3 :(得分:4)

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


授权代码流:在发布authorization code之前先发布access token

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

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

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

隐式流被认为是使用javascript之类的脚本语言的客户端的理想流,因为客户端不必请求authorization code和{{ 1}}依次减少了客户端的一次网络往返行程。


客户端凭据流:未经资源所有者许可发布access token

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

当客户端也是资源所有者时,这是理想的选择,因此从access token到下层都不需要任何授权权限。


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

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

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


混合流(OIDC流):发出access tokenauthorization code

这是access tokenAuthorization code flow的组合。因此,它被称为Implicit code flow


自定义流程

这实际上是可定制的流程。当您在业务中需要除Hybrid中所有协议规范之外的特定身份验证/验证过程时,可以使用此方法。

IdentityServer 非常了解这种情况,它通过设计支持可扩展性。工厂模式,装饰器模式和IoC / DI将使您更容易在 IdentityServer 上实现其他功能。