0.4 基于数据库和redis的模式
0.4.1 授权码模式
| 案例:ZJJ_SpringCloud_Oauth2_2020/06/16_19:55:55_bau11 |
|---|
项目yml配置 切换db模式
| flag: db # memory是内存模式 , db 是数据库模式 |
|---|
修改oauth_client_details表的配置信息
直接发起get请求,注意redirect_uri参数需要和数据库oauth_client_details里面的配置一样才行.
http://localhost:9999/oauth/authorize?
response_type=code&client_id=portal_app&redirect_uri=http://www.baidu.com&state=abc
get请求 http://localhost:9999/login
直接输入用户名和密码 用户名是zhangsan 密码是 123456
![Oauth2[大目录待整理] - 图1](/uploads/projects/zjj1994@distributed/5583f1b086af568405308db5f4a92981.png)
![Oauth2[大目录待整理] - 图2](/uploads/projects/zjj1994@distributed/638fec524ab6f7ef5f60c2845c2880d8.png)
![Oauth2[大目录待整理] - 图3](/uploads/projects/zjj1994@distributed/d0fd38d055f536832684b6f7d2503b6b.png)
0.4.1.1 获取到code,去换取token
http://localhost:9999/oauth/token(Post请求)
![Oauth2[大目录待整理] - 图4](/uploads/projects/zjj1994@distributed/f61fbce6eee66ffa1d952c133d308759.png)
![Oauth2[大目录待整理] - 图5](/uploads/projects/zjj1994@distributed/437c10054d82da43d7a703df51c6b54e.png)
redirect_uri 是 和配置的回调地址要一模一样
grant_type 是固定写死的
code 是从认证那里登录成功返回给你的code
0.4.1.2 尝试访问别的微服务
| 案例:ZJJ_SpringCloud_Oauth2_2020/06/16_20:06:58_gn5tv |
|---|
启动这个微服务, 然后用授权码模式获取的access_token 去访问这个服务
post请求:
http://localhost:8080/order/selectOrderInfoById/1
请求头 Authorization 携带 bearer xxxxxxxxxx 这个xxxxxx就是access_token
![Oauth2[大目录待整理] - 图6](/uploads/projects/zjj1994@distributed/5e48675a006ea0d6b83d6c96c9e44dfc.png)
![Oauth2[大目录待整理] - 图7](/uploads/projects/zjj1994@distributed/2bab0aedef141c93a3e9f4c010f1a034.png)
就能访问成功了. 注意Authorization 的type不要写
Gateway实现Oauth2
我们的微服务不再做权限控制,把权限控制功能放到网关上.
![Oauth2[大目录待整理] - 图8](/uploads/projects/zjj1994@distributed/caad3bd101c7952ef4fe48e4d46fa3c8.png)
用户通过浏览器 携带clientId 等等信息请求token, 网关直接转发请求token的资源给认证中心, 然后返回token.
用户通过浏览器访问服务的时候,会携带token,token在网关那里进行校验,校验通过就访问指定的服务,校验失败就提示前端权限不足.
0.4.2 jwt模式
| 案例:ZJJ_SpringCloud_Oauth2_2020/06/17_12:28:06_3ihi7 |
|---|
启动好项目之后开始测试:
访问
http://localhost:8888/oauth/token
![Oauth2[大目录待整理] - 图9](/uploads/projects/zjj1994@distributed/40031e63a318ed62c42be2ba1ad36e35.png)
![Oauth2[大目录待整理] - 图10](/uploads/projects/zjj1994@distributed/5fa70d0fdf3a05f00b8673840a8551e4.png)
就能获取到结果![Oauth2[大目录待整理] - 图11](/uploads/projects/zjj1994@distributed/77f7ccf058164e15c5e66333fb5cd70b.png)
测试token是否好用
启动sso-product-jwt-server项目![Oauth2[大目录待整理] - 图12](/uploads/projects/zjj1994@distributed/3d3136efe0ab2185ada8342f20b454f0.png)
![Oauth2[大目录待整理] - 图13](/uploads/projects/zjj1994@distributed/ee0fa8a213ff1cf3fe81a8778ce788c2.png)
Authorization用上面的access_token
访问成功是这个,如果访问失败的话就会抛出异常出来.![Oauth2[大目录待整理] - 图14](/uploads/projects/zjj1994@distributed/f9665d251a32eb176c78ac3fc48509f3.png)
