本次更新添加了对授权码模式的使用
授权码模式需要用户登录,所以借助浏览器
首先给数据库表中的oauth_client_details
表中client_id
为frontend
的行authorized_grant_types
添加authorization_code
,web_server_redirect_uri
设置为http://localhost:8080
。表示该客户端允许授权码模式以及授权码回调地址为http://localhost:8080
浏览器访问地址
http://localhost:9000/oauth/authorize?response_type=code&client_id=frontend&
scope=all&redirect_uri=http://localhost:8080
进入登录授权页面并同意授权,从回调地址中获取授权码
http://localhost:8080/?code=xGjrTm
通过授权码获取access_token
method: post
url: http://localhost:9000/oauth/token?grant_type=authorization_code
header:
{
Authorization: Basic ZnJvbnRlbmQ6ZnJvbnRlbmQ=,
Content-Type: application/x-www-form-urlencoded
}
body:
{
code: xGjrTm,
redirect_url: http://localhost:8080
}
单独的整合项目地址为:
GitHub:https://github.com/keets2012/microservice-integration
或者 码云:https://gitee.com/keets/microservice-integration
本次更新主要是增加了user,role,permission的相应接口。整合了微服务架构下,网关与auth权限服务、后端backend服务。
具体见博客微服务架构中整合网关、权限服务 。感谢黄同学@CANGWU 对Spring EL部分做的修改。
项目整合如果遇到问题,可以加入qq群649932629,最好大家都能自行搞定。。
去掉了Parent依赖,安装后,直接mvn clean spring-boot:run
(maven 如果没装我也不好说啥)
-
首先需要clone 一下Cloud-Parent ,在我的git项目里面可以找到 -
安装一下,mvn clean install
-
修改Auth项目中的配置文件,写了
XXXX
的地方,替换成自己的实际地址 -
Auth服务有调用到user服务,所以如果你只是想简单跑这个项目,可以不调用client包下的UserClient, 自己在
CustomAuthenticationProvider
中写一个私有方法,返回一个map,结果包括一个userId。另外,bootstrap.yml
中的关于Spring Cloud的都可以注掉。 只留下:server: port: 9000
-
创建auth数据库,运行auth.sql
-
API级别权限验证修改的源码部分,可以参见我fork 的
spring-security-oauth
和spring-cloud-security
。 -
其他细节参考博客
-
你的star是对我最好的鼓励^_^
笔者自己运行了可行:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MDkwNzMzMjcsIlgtQU9ITy1Vc2VySWQiOiIxNGY1MmE0OS0yYTgxLTRhMmYtOGI5Mi01ZmU0NzUzZGRmZGEiLCJ1c2VyX25hbWUiOiIxODM2MjkxNjcyNiIsImp0aSI6IjM5NDEzN2I5LTNjZGItNGUyNy04NGRjLWM5YjEyYzk3ZTA4YyIsImNsaWVudF9pZCI6ImZyb250ZW5kIiwic2NvcGUiOlsiYWxsIl19.pGZhGNVECg0b4LB_pYXTTVKjNn8FA5biM04Bhcd-MEE",
"token_type": "bearer",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiIxODM2MjkxNjcyNiIsInNjb3BlIjpbImFsbCJdLCJhdGkiOiIzOTQxMzdiOS0zY2RiLTRlMjctODRkYy1jOWIxMmM5N2UwOGMiLCJleHAiOjE1MTE2MjIxMjcsIlgtQU9ITy1Vc2VySWQiOiIxNGY1MmE0OS0yYTgxLTRhMmYtOGI5Mi01ZmU0NzUzZGRmZGEiLCJqdGkiOiJkYTBmOTMxMS1lZjc0LTRiMjQtODViZi04ZTNjNDVhNGEyNzkiLCJjbGllbnRfaWQiOiJmcm9udGVuZCJ9.2MRdqEogAwbesRfj2TKoWhMazItBlpjbQx7dlgfFpHE",
"expires_in": 43199,
"scope": "all",
"X-AOHO-UserId": "14f52a49-2a81-4a2f-8b92-5fe4753ddfda",
"jti": "394137b9-3cdb-4e27-84dc-c9b12c97e08c",
"X-AOHO-ClientId": "frontend"
}
ps: 登录的用户名密码要在表单里面写,内容随意,因为在代码中已经去掉了对user服务的校验。
有问题联系 aoho002#gmail.com
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
认证鉴权与API权限控制在微服务架构中的设计与实现(二)
认证鉴权与API权限控制在微服务架构中的设计与实现(三)
认证鉴权与API权限控制在微服务架构中的设计与实现(四)