IdentityServer支持在Flows枚举中定义并为客户端设置的不同OpenId Connect流。还有针对每种类型的流的样本以及文档中的许多引用,但是我找不到documentation中的流量的简单定义列表,好像它们太明显无法用语言解释。但我想他们并非如此。您能否详细说明这些差异,或许我们可以将其添加到文档中?
那么:隐式流程,资源所有者密码凭据流程,授权代码流程,客户端凭据流量,自定义授权流量和混合流量?还有哪些是OAuth流,哪些是OpenID Connect流?
谢谢!
答案 0 :(得分:38)
我遇到了同样的问题,目前工作仍在进行中。当我完成文档时,我可能会在这里发布。暂时:请检查草稿:
Enrich IdentityServer Documentation with OIDC and OAuth2 Flows section #73
答案 1 :(得分:19)
来自leastPrivilage的第一个链接:和Aharon Paretzki's OAuth 2 Simplified
流量决定 ID令牌 (即授权码)和 访问令牌 (即'令牌')返回给客户端:
授权代码流:OAuth 2.0流程
隐含流:OAuth 2.0流程
混合流程:OAuth 2.0流程
答案 2 :(得分:9)
查看规格 - 已经全部记下来了:
http://openid.net/specs/openid-connect-core-1_0.html 和 http://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 Owner
,User Agent
和Resource Server
,否则很难理解流程。 here中对这些实体(角色,很珍贵)有一些简要说明。
授权代码流:在发布authorization code
之前先发布access token
。
authorization code.
authorization code
的授权。access token
请求authorization code
access token
。 隐式代码流:即使没有提供access token
,也会发出authorization code
。
access token
。access token
的授权authorization code
。 隐式流被认为是使用javascript
之类的脚本语言的客户端的理想流,因为客户端不必请求authorization code
和{{ 1}}依次减少了客户端的一次网络往返行程。
客户端凭据流:未经资源所有者许可发布access token
。
access token
。当客户端也是资源所有者时,这是理想的选择,因此从access token
到下层都不需要任何授权权限。
资源所有者流:如果客户端具有资源所有者的凭据(例如,ID /密码),则发出access token
access token
。access token
。对于您认为与他们共享ID和密码绝对安全的客户,此流程非常理想。
混合流(OIDC流):发出access token
和authorization code
。
这是access token
和Authorization code flow
的组合。因此,它被称为Implicit code flow
。
自定义流程
这实际上是可定制的流程。当您在业务中需要除Hybrid
中所有协议规范之外的特定身份验证/验证过程时,可以使用此方法。
IdentityServer 非常了解这种情况,它通过设计支持可扩展性。工厂模式,装饰器模式和IoC / DI将使您更容易在 IdentityServer 上实现其他功能。