本文简单的描述出了 OAuth2 工作背景,看完后可以轻松理解 OAuth2 是用来解决什么问题的。

1. 用户有自己的数据

OAuth2 图解_java

2. 有一个服务器,负责管理用户的数据。这个服务器被称为”Resource Server(资源服务器)“

OAuth2 图解_java_02

3. 有一个客户端应用,想要使用用户的数据

OAuth2 图解_java_03

4. 资源服务器需要准备一个 API 接口,用来传递用户的数据

OAuth2 图解_java_04

5. 客户端应用请求 API 接口,想要用户的数据

OAuth2 图解_java_05

6. 资源服务器返回用户数据

OAuth2 图解_java_06

7. 如果某个客户端应用心术不正怎么办?

OAuth2 图解_java_07

8. 坏客户端应用也请求资源服务器 API

OAuth2 图解_java_08

9. 资源服务器也可以正常返回用户数据
10. 结果就是坏客户端拿到了用户数据
11. 我们需要一个机制来保护用户的数据

OAuth2 图解_java_09

12. 根据最佳实践,让客户端应用使用 ”Access Token(访问令牌)“ 比较好。客户端有了 Token 就说明它有了访问用户数据的权限

OAuth2 图解_java_10

13. 客户端应用请求 API 时出示自己的 Token 令牌

OAuth2 图解_java_11

14. 资源服务器从请求中提取 Token

OAuth2 图解_java_12

15. 资源服务器验证 Token 令牌

OAuth2 图解_java_13

16. 确认之后,资源服务器返回用户数据
17. 这个机制的前提是客户端得提前拿到 Token 令牌
18. 我们需要有人负责颁发 Token 令牌

OAuth2 图解_java_14

19. 谁来颁发 Token 令牌 ...

OAuth2 图解_java_15

20. 颁发 Token 的角色被称为 ”Authorization Server(授权服务器)“

OAuth2 图解_java_16

21. 客户端应用需要与授权服务器打交道了

OAuth2 图解_java_17

22. 授权服务器生成 Token 令牌

OAuth2 图解_java_18

23. 然后把 Token 颁发给客户端

OAuth2 图解_java_19

24. 先暂停,回顾一下,现在有3个角色了 ”授权服务器“、”客户端应用“、”资源服务器“
25. 授权服务器生成 Token
26. 然后颁发给客户端

27. 客户端使用 Token 请求资源服务器的 API 接口

OAuth2 图解_java_20

28. 资源服务器从请求中提取 Token

OAuth2 图解_java_21

29. 验证 Token

OAuth2 图解_java_22

30. Token 没问题就返回用户数据

OAuth2 图解_java_23

31. 上面的流程中,第一步是授权服务器生成 Token,而实际流程中,生成 Token 之前是需要询问 User 用户的

OAuth2 图解_java_24

32. 首先,客户端请求授权服务器,申请一个 Token
33. 授权服务器询问用户,是否给这个客户端权限
34. 如果用户同意 ...

OAuth2 图解_java_25

35. 那么授权服务器就生成一个 Token

OAuth2 图解_java_26

36. 然后颁发给客户端

OAuth2 图解_java_27

37. 重点就是这个黄色区域

OAuth2 图解_java_28

38. 这块儿是请求 Token、拿到 Token 的过程

OAuth2 图解_java_29

39. 这个过程就是 OAuth2 框架所关注的,为其做了标准化定义

OAuth2 图解_java_30

小结

以上就是 OAuth2  的工作背景,OAuth2 框架关注的是整个安全认证过程中的 "请求 Token、颁发 Token" 这部分流程。

这块儿有多种方式,OAuth2 定义了4种模式来处理。

这4种模式有点复杂,之后再详述。

翻译整理自

https://medium.com/@darutk/the-simplest-guide-to-oauth-2-0-8c71bd9a15bb