目前主流的统一认证和授权方式有 OAuth2、分布式 Session 和 JWT 等,其中又以 OAuth2 方案使用最为广泛,已经成为当前授权的行业标准。

基于OAuth2 协议和 JWT实现一个简单的认证和授权系统

OAuth2

  1. +--------+ +---------------+
  2. | |--(1)- Authorization Request ->| Resource |
  3. | | | Owner |
  4. | |<-(2)-- Authorization Grant ---| |
  5. | | +---------------+
  6. | |
  7. | | +---------------+
  8. | |--(3)-- Authorization Grant -->| Authorization |
  9. e
  10. | Client | | Server |
  11. | |<-(4)----- Access Token -------| |
  12. | | +---------------+
  13. | |
  14. | | +---------------+
  15. | |--(5)----- Access Token ------>| Resource |
  16. | | | Server |
  17. | |<-(6)--- Protected Resource ---| |
  18. +--------+ +---------------+

6个步骤:

①客户端请求资源所有者的授权。

②资源所有者同意授权,返回授权许可(Authorization Grant),这代表了资源所有者的授权凭证。

③客户端携带授权许可要求授权服务器进行认证,请求访问令牌。

④授权服务器会同时验证客户端身份和认证客户端携带的授权许可的有效性,如果有效,则返回访问令牌。

⑤客户端获取到授权服务器颁发的访问令牌后,就可以携带访问令牌访问资源服务器中受保护的资源。

⑥资源服务器验证访问令牌,如果有效,则接受访问请求,返回受保护资源。

JWT

JWT 可以很好地充当 OAuth2 的访问令牌和刷新令牌的载体