Oauth2的四种角色:
举个简单的例子说明下这四个角色:用户 张三 登录CSDN,张三没有注册过CSDN所以他选择微信登录,他使用微信扫描二维码 后的登录成功
1、资源所有者,在上面的例子中 资源所有者 就是张三这个用户
2、资源服务器,就是保存用户资源的,就是上面例子中的微信,微信中存储着用户的信息;
3、客户端,就是上面说的CSDN,就是需要获得用户信息的,在客户端发起授权请求并引导用户去授权服务器获得授权许可;
4、授权服务器,用于生成token,客户端拿这个token去资源服务器获得用户信息,也是上面例子中的微信;
微信授权认证的简单流程:
1、客户端首先需要拿公司的营业执照去微信开放平台注册,注册成功后微信开放平台生成appId和appSecret 表示这个客户端在微信中的唯一标识;
2、用户登录CSDN时选择使用微信扫码登录,用户使用微信扫描二维码后,此时微信开放平台会生成一个token通过二维码中的重定向地址返回给CSDN;
3、CSDN通过token再次向微信开放平台发起请求,获取用户信息,微信开放平台返回用户信息(包含 user_id,电话、姓名、地址等),CSDN通过这些用户信息是否存在,如果存在则跳转到用户首页,如果不存在则根据这些用户信息创建一个用户;
在上面的流程中,第二步生成token、第三步中使用token获得用户信息 对应的就是授权服务器和资源服务器,也都是在微信中完成的;
Oauth2的四种授权模式:就是获取 token的几种模式
1、授权码模式:首先通过client_id等获得授权码,然后根据授权码获得token;
2、简化模式:通过用户名 和 密码就可以获取token;
3、password模式:用户和密码是在 UserDetailsService 的实现类中指定;
4、客户端模式:通过 client_id 和 client_secret 就可以获得token;
除了这四种模式还有刷新令牌获取token的操作,当token过期时使用refresh_token刷新令牌,客户端模式和简化模式获取token时不返回refresh_token 所以无法使用刷新令牌;
demo的用法:
下面链接是 oauth2 的使用demo,启动项目中的oauth2-demo, 四种模式的使用参考 AuthorizationServerConfig2 中的注释,当切换不同模式的时候要重启系统、清除浏览器缓存,不然token已经被缓存了看不出效果;
1、授权码模式:
(1)、获得授权码:获得授权码
(2)、获得token
(3)、根据token访问系统中的方法,我本地使用postman访问系统,需要指定授权类型
2、简化模式:
根据client_id即可获得token,需要输入账号密码
3、password模式:
根据client_id、client_secret、用户名、密码 获得token
4、客户端模式:
根据client_id、client_secret就可以获得token,在上面的微信扫描二维码登录CSDN的场景中就使用的客户端模式
tips: 上面的账号和密码是登录资源服务器的,用微信扫描登录csdn的例子中因为微信本身就是登录的,所以这种场景一般使用客户端模式;
demo链接:https://pan.baidu.com/s/1LqkJ_6GJuIHYDjMa2dRshQ?pwd=hpyk