Day XX OAuth2
OAuth 的概念
OAuth 是一个协议。具体的实现有JAVA Python 等方法。
其作用是用来授权某个操作。拿到这个授权之后可以有操作的权限。
OAuth 与 密码的区别
OAuth 是短期的,自动失效;
OAuth 可以撤销;
OAuth 有权限范围
OAuth 的结构
OAuth 分为
Resource Owner
资源拥有者,一般指用户
Client
需要请求资源的服务
Authorization Server
能够纷发 token 的服务
Resource Server
拥有资源的服务
OAuth 授权模式
授权码模式
使用授权码换令牌。用户申请授权码。将授权码给client,client 用授权码换令牌。client再用令牌进行操作。
简化模式
用户直接得到令牌,将令牌给client
密码模式
使用密码登录客户端。客户端从 OAuth 中拿到 token
客户端模式
client自己能够产生 token
OAuth 的优点
为什么使用 OAuth
对于单体结构:
使用 Cookie-session 方法。
如果所有功能都在一个服务上,可以用 cookie-session 进行。
分布式架构:
需要访问多个服务。所以 session 需要共享。此时可用 redis 进行 session 共享
或者使用 token
cookie session 与 token 的区别
-
cookie 不能跨域,对前后端分离的架构很困难
-
移动端没有 cookie
-
token 基于 header 传递,解决了部分 CSRF 攻击
-
token 比 sessionID 大,客户端会存在 Local storage 中,可被 JS 直接读取
在 Spring 项目中,使用 Spring Security OAuth 实现 OAuth 协议