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。
- 客户端直接请求访问令牌。
-
IdentityServer 验证客户端并立即发出
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 上实现附加功能。