1. OAuth2 简易实战 (一)- 四种模式
1.1. 隐式授权模式 (Implicit Grant)
第一步: 用户访问页面时, 重定向到认证服务器.
第二步: 认证服务器给用户一个认证页面, 等待用户授权.
第三步: 用户授权, 认证服务器想应用页面返回 Token
第四步: 验证 Token, 访问真正的资源页面
1.2. 授权码授权模式 (Authorization code Grant)
第一步: 用户访问页面
第二步: 访问的页面将请求重定向到认证服务器
第三步: 认证服务器向用户展示授权页面, 等待用户授权
第四步: 用户授权, 认证服务器生成一个 code 和带上 client_id 发送给应用服务器
然后, 应用服务器拿到 code, 并用 client_id 去后台查询对应的 client_secret
第五步: 将 code,client_id,client_secret 传给认证服务器换取 access_token 和
refresh_token
第六步: 将 access_token 和 refresh_token 传给应用服务器
第七步: 验证 token, 访问真正的资源页面
案例 GitHub 自取: https://github.com/PinkPig-cq/springSecurityoAuth
1.3. 密码模式 (Resource Owner Password Credentials Grant)
第一步: 用户访问用页面时, 输入第三方认证所需要的信息 (QQ / 微信账号密码)
第二步: 应用页面那种这个信息去认证服务器授权
第三步: 认证服务器授权通过, 拿到 token, 访问真正的资源页面
优点: 不需要多次请求转发, 额外开销, 同时可以获取更多的用户信息.(都拿到账号密码了)
缺点: 局限性, 认证服务器和应用方必须有超高的信赖.(比如亲兄弟?)
应用场景: 自家公司搭建的认证服务器
1.4. 客户端凭证模式 (Client Credentials Grant)
第一步: 用户访问应用客户端
第二步: 通过客户端定义的验证方法, 拿到 token, 无需授权
第三步: 访问资源服务器 A
第四步: 拿到一次 token 就可以畅通无阻的访问其他的资源页面.
这是一种最简单的模式, 只要 client 请求, 我们就将 AccessToken 发送给它. 这种模式是最方便但最不安全的模式. 因此这就要求我们对 client 完全的信任, 而 client 本身也是安全的.
因此这种模式一般用来提供给我们完全信任的服务器端服务. 在这个过程中不需要用户的参与.
ps: 个人理解, 如有错误, 请帮我指出下, 谢谢.
来源: https://www.cnblogs.com/Innocent-of-Dabber/p/11009811.html