OAuth2基础
OAuth2是一种授权机制,给终端用户提供一个临时的access_token来访问系统资源。
一、OAuth2的四种模式
1.1 授权码模式
最安全的模式,有一个二次验证的过程。
关键点在于第8步,京东网站会拿“授权码”去二次验证,如果是个合法的,QQ会返回access_token给京东服务器,进而返回给用户浏览器保存在storage中。
完成授权后,用户浏览器访问资源时,每次带着access_token。
1.2 简化模式
简化模式使用网站只有静态页面的场景。
由于没有服务器,不能由服务器去做二次验证,所以直接在第6步返回access_token。此时access_token是放在url fragment中返回的,一定程度上增加了安全性。
TODO: 还要探究一下fragment为什么比?参数形式要安全。
1.3 密码模式
密码模式适用于 京东网站和QQ合并后的场景,两家公司超级信任。
没有了第3/4/5步,京东网站直接提供一个登录QQ的页面,用户输入QQ密码,京东网站后台收到后拿着用户的QQ和密码去请求授权。
和授权码模式区别表面上的一点是登录页面的提供者不同。
1.4 客户端模式
客户端模式,使用于没有用户浏览器界面的,比如控制台。不过不需要提供用户的QQ和密码,而是给出客户端的id和密码。授权时针对客户端授权,而不是针对用户授权。
二、OAuth实战
服务器可以分为授权服务器和资源服务器。
2.1 授权服务器
基于Spring Cloud OAuth和Spring Cloud Security搭建授权服务器。
工程创建后,需要重点配置两个内容:OAuth相关策略和spring security原来的相关安全策略。
1. 配置客户端信息和授权
-
首先开启授权服务器功能。
-
配置客户端认证信息,客户端也可以存储在数据库表中,通过jdbc读取,这里的配置的client才可以被授权。
-
用户认证信息和token存储方式
-
开启一个服务端点(其实就是开启一个url /oauth/check_token),资源服务器会访问这个端点来验证token合法性。如果全部使用jwt token,则不需要再次验证token,则不需要开启这个服务端点。
2. 配置用户认证策略
这个配置的是用户认证策略,完全是spring security那一套东东。
2.2 资源服务器
基于Spring Cloud OAuth和Spring Cloud Security搭建资源服务器。
1. 配置token校验规则服务
配置了checkTokenEndpoint, 则拿到token后,授权去授权服务器校验token.
2. 配置资源访问规则
如图,设置了只有admin权限的用户才可以访问 /admin开头的url资源。
三、 总结
在实战中,还要使用jwt来减少token校验对授权服务器的验证压力。
另外,jwt如何及时失效的问题, 考虑由gateway将jwt token换成普通短token,然后将映射关系存储在jwt token中。