OAuth2.0简介
假设我们的服务A提供通过github登录功能
流程(示例使用github登录)
- 先在github上注册服务A,github会给我们
client_id和client_secret - 前端通过github登录功能,用户点击后跳转到github,并携带
client_id - 用户在github网站完成登录和授权,之后会重定向到我们网站且携带
临时auth - 前端将
临时auth传给后端,后端使用临时auth+client_id+client_secret请求access_token和refresh_token - 后端使用
access_token向github请求用户授权数据
注意
client_id是公开的,允许被任何人知道;client_secret只能存在服务端- github不会访问我们提供的重定向地址,重定向发生在客户端(浏览器)
临时auth保证了必须使用client_secret才能获取到access_token
github侧细节
临时auth须和github用户绑定,github知道临时auth+client_id对应哪个github用户
服务后端细节
- 后端拿到
临时auth,获取github用户信息后,先判断该github用户是否已经注册过,如果没有则需要新建平台用户,且绑定该github账户 - 此时可以认为登录成功,返回时可以重定向到主页,且包含平台的用户登录凭据(如session_id或jwt),禁止返回
access_token等OAuth相关信息