https://www.yuque.com/yuejiangliu/dotnet/cg95ni
代表资源所有者的凭据
授权 Authorization Grant
授权是一个代表着资源所有者权限的凭据,它可以被客户端应用来获取 Access Token。
OAuth 2.0 里面定义了 4 种类型的授权,分别是:
- Auhtorization Code 授权码
- Implicit
- Resource Owner Password Credentials
- Client Credentials
OAuth 2.0 还定义了一个扩展机制以便自定义其它的授权类型。
用一句话描述“授权(Authorization Grant)就是获取 Token 的方法”。
- Authorization Code
-
- 使用授权服务器作为客户端和资源所有者的中介
- 在授权服务器把资源所有者送回(重定向)到客户端的时候带着这个临时的凭据 Authorization Code。它就代表着资源所有者委托给客户端应用的权限
- 在安全方面的一些优点:
-
-
- 可以对客户端应用进行身份认证
- Access Token 直接发送到客户端应用,不经过资源所有者的浏览器,所以不会将其暴露给外界,包括资源所有者
-
-
- 适合 ASP.NET Core MVC 这类服务器端的客户端应用
-
-
- Access Token 直接发送到 Web Server,不经过用户浏览器,不会暴露 Access Token
-
- Implicit
-
- Authorization Code 的简化版本
- 针对浏览器内的客户端应用,例如 Angular SPA
- 没有授权码发回给客户端应用的步骤,授权服务器直接把 Access Token 发回给了客户端应用,所以在浏览器内能获取到 Access Token
- Implicit 授权确实可以提高浏览器内应用的响应性和效率,毕竟它减少了往返的次数。但是方便可能会带来风险,推荐尽量使用 Authorization Code
- Resource Owner Password Credentials
-
- 直接使用用户的密码作为授权来获得 Access Token
- 仅当用户和客户端间高度信任且其他授权方式不可用时才可以使用这种授权方式
- 这种凭据只应用于一次请求并用于交换 Access Token,避免客户端存储用户的凭据(密码)
-
-
- 通过交换一个长期有效的 Access Token 或使用 Refresh Token都可以达到这种效果
-
- Client Credentials
-
- 受保护资源并不属于任意一个用户(没有用户对该资源负责),但客户端任需访问受保护资源
- Device Code
- Refresh Token
-
- 通常能从授权服务器获得两个令牌:Access Token 和 Refresh Token
- 当 Access Token 要过期时,我们使用 Refresh Token 再获取一个 Access Token