身份服务器流
Posted
技术标签:
【中文标题】身份服务器流【英文标题】:IdentityServer Flows 【发布时间】:2015-06-23 09:14:50 【问题描述】:IdentityServer 支持在 Flows 枚举中定义并为客户端设置的不同 OpenId Connect 流。还有每种类型的流的示例以及文档中对它们的许多引用,但我找不到documentation 中流的简单定义列表,好像它们太明显而无法用语言解释。但我想他们不是。您能否详细说明它们的区别,也许我们可以将其添加到文档中?
那么什么是:隐式流程、资源所有者密码凭证流程、授权码流程、客户端凭证流、自定义授权流和混合流?还有哪些是 OAuth 流,哪些是 OpenID Connect 流?
谢谢!
【问题讨论】:
【参考方案1】:我遇到了同样的问题,目前工作仍在进行中。当我完成文档时,我可能会在这里发布。暂时:请检查草稿:
Enrich IdentityServer Documentation with OIDC and OAuth2 Flows section #73
更新: OIDC and OAuth2 Flows
【讨论】:
另请参阅 DigitalOcean 的 introduction to OAuth 2.0。【参考方案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.html 和 https://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 Owner
、User Agent
和Resource 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 code
和access token
,在反过来,为客户端减少了一次网络往返。
客户端凭据流:在未经资源所有者许可的情况下发出access token
。
access token
。
当客户端也是资源所有者时这是理想的,因此它不需要任何授权权限一直到access token
。
资源所有者流程:如果客户端拥有资源所有者的凭据(例如 Id / 密码),则发出 access token
access token
。
IdentityServer 验证客户端并检查资源所有者的身份。
如果有效,客户端会立即获得access token
。
此流程非常适合您认为与他们共享 ID 和密码绝对安全的客户。
混合流(OIDC 流):发出authorization code
和access token
。
这是Authorization code flow
和Implicit code flow
的组合。这就是为什么它被称为Hybrid
。
自定义流程
这实际上是一个可定制的流程。除了OAuth2
中的所有协议规范之外,当您的业务需要特定的身份验证/验证流程时,可以使用此功能。
IdentityServer 很清楚这种情况,它通过设计支持可扩展性。工厂模式、装饰器模式和 IoC / DI 将使您更容易在 IdentityServer 上实现附加功能。
【讨论】:
以上是关于身份服务器流的主要内容,如果未能解决你的问题,请参考以下文章
继续与 OIDC JS 客户端和身份服务器进行会话 4 授权流与 Azure 应用服务上的 PKCE 流
Cordova AAD 服务器流身份验证在 Android 和 iOS 上挂起