57

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

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

谢谢!

4

4 回答 4

41

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

使用 OIDC 和 OAuth2 流程丰富 IdentityServer 文档部分 #73

更新: OIDC 和 OAuth2 流程

于 2015-04-23T12:49:11.990 回答
24

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

流程决定如何将ID 令牌(即授权码)和访问令牌(即“令牌”)返回给客户端:

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

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

隐式流:OAuth 2.0 流,其中

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

混合流:OAuth 2.0 流,其中

  • 从授权端点返回一个授权码,
  • 一些令牌直接从授权端点返回,而其他令牌则从令牌端点返回(作为第二阶段,以换取授权码)。
  • 在需要两种流程的地方使用。
于 2015-10-28T22:53:50.680 回答
12

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

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/

于 2015-04-16T19:35:40.850 回答
8

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


授权码流程authorization code在发布之前发布access token

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

隐式代码流:发出一个access tokenauthorization code提供的偶数。

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

隐式流被认为是使用脚本语言的客户端的理想流,javascript因为客户端不必单独请求 anauthorization code和 an access token,从而减少了客户端的一次网络往返。


客户端凭证流:在access token没有资源所有者许可的情况下发出。

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

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


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

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

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


混合流(OIDC 流):发出一个authorization code和一个access token

这是Authorization code flow和的组合Implicit code flow。这就是它被称为 的原因Hybrid


自定义流程

这实际上是一个可定制的流程。除了OAuth2.

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

于 2018-08-04T16:43:23.667 回答