IdentityServer流程

57
IdentityServer支持不同的OpenId Connect流程,这些流程在Flows枚举中定义并设置给客户端。每种类型的流程都有示例,并在文档中引用它们,但我找不到一个简单的定义列表来解释文档中的这些流程,好像它们太明显了,不需要用文字来解释。但我想它们并不是那么明显。您能否详细介绍一下它们之间的区别?也许我们可以将其添加到文档中?
那么什么是:隐式流、资源所有者密码凭证流、授权码流、客户端凭证流、自定义授权流和混合流?哪些是OAuth流程,哪些是OpenID Connect流程?
谢谢!
4个回答

41

5
请参阅DigitalOcean的OAuth 2.0介绍 - orad

24

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

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

Authorization Code Flow: OAuth 2.0流程,其中

  • 从授权端点返回授权代码
  • 然后在交换授权代码时从令牌端点返回所有令牌(作为第二阶段)
  • 用于可以维护其客户端秘密机密性的基于服务器的调用(API)。只要没有人能够访问“客户端秘密”,就可以提供更强的安全性。

Implicit Flow: OAuth 2.0流程,其中

  • 所有令牌都直接从授权端点返回
  • 既不使用令牌端点也不使用授权代码。
  • 用于无法保持客户端秘密机密性的移动和Web应用程序,因此有必要由auth服务器本身发出令牌。这不太安全,建议设置服务器以拒绝对API使用的implicit flow调用,并仅允许用于基于浏览器和移动应用程序。

Hybrid Flow: OAuth 2.0流程,其中

  • 从授权端点返回授权代码,
  • 某些令牌直接从授权端点返回,而其他令牌(作为第二阶段,在交换授权代码时)从令牌端点返回。
  • 用于需要两种流程的情况。

12

2
我知道,但我正在寻找一个更简短的描述。我在你的博客中找到了这个描述(http://leastprivilege.com/2014/10/10/openid-connect-hybrid-flow-and-identityserver-v3/),非常有用。 - orad
3
我也认为Identity Server最大的问题在于产品的基本信息有限。在实施框架大约一个月左右,极其详细的文档会很有用,但学习曲线不是陡峭的而是近乎垂直的。 - Dillorscroft
1
我通过阅读Auth0.com的实现文档,然后回到Identity Server,实际上更多地了解了Identity Server。 - Dillorscroft
4
请随意将所有内容写出来并告诉我们,以便我们可以链接它。它不是一个产品,而是开源软件。抱怨很容易,你可以自己改进它。 - leastprivilege
3
你说得对。我不应该抱怨。这是一个很棒的资源,希望我也能做出贡献。 - Dillorscroft
显示剩余2条评论

8

OAuth2中定义的流程是客户端从身份提供者服务器(在此处为IdentityServer)接收access token的几种方式;要理解这些流程,您必须充分了解流程图中指定的实体,例如Resource OwnerUser AgentResource Server。这些实体的简要说明(角色)在这里


授权码流程:在发放访问令牌之前,会先发放一个授权码

  • 客户端请求授权码
  • IdentityServer验证客户端并请求资源所有者授权以发放授权码
  • 然后客户端使用给定的授权码请求访问令牌
  • 授权服务器直接向客户端发放访问令牌

隐式代码流:即使没有提供授权码,也会发出访问令牌

  • 客户端直接请求访问令牌
  • IdentityServer跳过验证客户端(在某些情况下,它部分验证),但仍要求资源所有者授予授权以发放访问令牌
  • 此流程从不发出授权码

隐式流被认为是使用脚本语言(如javascript)的客户端的理想流程,因为客户端无需单独请求授权码访问令牌,从而减少了客户端的一次网络往返。


客户端凭证流程:无需资源所有者的许可即可发出访问令牌

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

当客户端也是资源所有者时,这是理想的选择,因此它不需要任何授权权限一直到访问令牌


资源所有者流程: 如果客户端拥有资源所有者的凭据(例如ID /密码),则发出访问令牌

  • 客户端直接请求访问令牌
  • IdentityServer验证客户端并检查资源所有者的身份。
  • 如果有效,则客户端立即获得访问令牌

此流程适用于您认为与其共享ID和密码是绝对安全的客户端。


混合流程(OIDC流程): 发放一个授权码和访问令牌。
这是授权码流程和隐式代码流程的组合。这就是为什么它被称为混合流程。

自定义流程

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接