身份服务器流

IdentityServer Flows

IdentityServer 支持 Flows enum and set for clients. There's also samples for each type of flow and many references to them in the docs but I could not find a simple definition list of what flows are in the documentation 中定义的不同 OpenId Connect 流程,好像它们太明显而无法用文字解释。但我想他们不是。您能否详细说明它们的区别,也许我们可以将其添加到文档中?

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

谢谢!

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

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/

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

Enrich IdentityServer Documentation with OIDC and OAuth2 Flows section #73

更新: OIDC and OAuth2 Flows

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

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

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

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

隐式流程:OAuth 2.0 流程,其中

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

混合流程:OAuth 2.0 流程,其中

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

OAuth2 are just several ways for a client to receive an access token from an identity provider server; the IdentityServer in this case. Understanding the flows won't be easy unless you fully comprehend the entities specified in the flow diagrams such as Resource Owner, User Agent, and Resource Server. There're some brief explanations on these entities ( roles, preciously ) in here 中定义的流程。


授权代码流:在发出access token.

之前发出authorization code
  • 客户请求 authorization code.
  • IdentityServer 验证客户端并请求资源所有者授权发布 authorization code.
  • 客户端然后请求 access token 给定的 authorization code
  • 授权服务器直接向客户端发出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 code 和一个 access token.

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


自定义流程

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

中的所有协议规范之外,当您在业务中需要特定的身份验证/验证过程时,可以使用它。

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

上实现其他功能