# 认证中心服务手册
理论所有服务皆为资源服务,后台提供基础资源服务模版下载 地址:http://git.tq-service.com/architecture/ts-service-resource-demo 资源服务默认环境:
- JDK1.8
- idea 推荐 2018.3.*版本
- Maven 3.* 资源服务默认接入以下服务:
- nacos配置中心
- nacos服务注册
- sentinel流控
- oauth认证
- actuator健康检查
- 原生支持无状态扩展
# 要求
- 不允许在资源服务中开发定时任务,所有定时任务必须接入xxljob
- 配置系统配置存放在本地配置文件中,动态刷新配置统一在配置中心新建项目配置文件并引用
# 服务支持
# 认证中心获取token方式
接口地址:https://gateway-test.tq-service.com/uaa-center/oauth/token
参数 | 类型 | 是否必填 | 备注 |
---|---|---|---|
grant_type | String | 是 | password,client_credentials |
username | String | 是 | 帐号 |
password | String | 是 | 因为前端有加密,所以直接调用接口需要将密码进行一次rsa加密 |
client_id | String | password:是,client_credentials:否 | 客户端账户 ,管理后台拷贝 |
client_secret | String | password:是,client_credentials:否 | 客户端密码,管理后台拷贝 |
# 认证中心Knife4j接口文档接入
1. 第一步
工程接入ts-module-swagger包
2. 第二步
在Nacos配置文件gateway-swagger.yaml中新增需要加入文档系统扫描的服务名称
- 项目名称 # 项目名称必须跟网关中(gateway-router.json route.id)一致,后台会根据网关route.ID 进行匹配过滤
3. 第三步
给对应人员在功能菜单权限打开【开发工具】菜单权限
4. 第四步
在认证中心后台 -》资源权限管理-》文档管理权限进行项目文档全选配置
# 认证中心接口接入
- HTTP接入
- 调用认证中心接口需在参数携带access_token,认证中心根据token判断用户权限信息。
- access_token在用户登录成功后,通过SecurityContextHolder.getContext().getAuthentication()中获取到Authentication认证信息, Authentication认证中包含用户token。
- 如果没有用户登录行为的接口调用
- 使用后台分配帐号密码
- 通过调用认证中心获取token接口,获得access_token
- 调用需认证服务接口
- SDK接入(待开发)
- SDK接入通过配置ID和key即可实现对相关服务的调用认证
# 数据权限
- 数据权限通过角色所属组织实现数据范围权限过滤,登录成功后获取的用户信息包含用户角色信息,通过用户角色信息可以获 取用户组织权限范围,实现范围数据过滤
- 角色分为普通角色和管理员角色,管理员角色可以一对多对应多个组织范围,普通角色一对一,一个角色对应一个组织
# 客户端模式
- 获取认证token接口
- 接口地址(测试):https://gateway-test.tq-service.com/uaa-center/oauth/token
- 请求方式:POST
参数 类型 备注 grant_type String client_credentials client_id String 客户端ID client_secret String 客户端密码
- 返回结果:
{
"access_token": "672849b1-5260-49d6-be52-0408bd320f00",
"token_type": "bearer",
"expires_in": 64799,
"scope": "read write"
}
- 获取用户信息接口
- 接口地址(测试):https://gateway-test.tq-service.com/uaa-center/user
- 请求方式:POST
参数 类型 备注 userId String 登录账户 如:xiangjx access_token String 认证token
{
"code": 200,
"requestId": "2a0e3446-0e4c-435d-8a06-969deb6be43a",
"data": {
"user": {
"userId": "3ae2f45fe1784e48b03f23dabf730c7e",
"loginId": "xiangjx",
"password": "",
"passwordDefaultNum": 0,
"pwdLastModifyDate": null,
"isLock": "0",
"orderNo": 108391,
"username": "向建新",
"sex": "0",
"idCardType": null,
"idCardNo": null,
"mobile": null,
"createUser": "1",
"createTime": "2020-12-23 00:00:00",
"modifyTime": null,
"accountSource": null,
"effective": "1",
"effectiveTime": null,
"jobnumber": null,
"state": null,
"birthPlace": null,
"address": null,
"zipCode": null,
"email": null,
"phone": null,
"education": null,
"graduateSchool": null,
"workPlace": null,
"field01": null,
"field02": null,
"field03": null,
"field04": null,
"field05": null,
"field06": null,
"field07": null,
"field08": null,
"field09": null,
"field10": null,
"orgId": "c588f0b0d75141d6be2352b54633e2e9",
"orgName": "测试组",
"spell": "CSZ",
"parentId": "fd811ab9c30440088df3e29ea784460a",
"idPath": "fd811ab9c30440088df3e29ea784460a,c588f0b0d75141d6be2352b54633e2e9",
"namePath": "金科服务集团,测试组",
"customNo": "CS",
"orgOrderNo": 30,
"orgLevel": 1,
"areaId": "8fd94837081945249b84dbbf3a0399c9",
"orgType": "02",
"orgCreateUser": "1",
"orgCreateTime": "2019-07-23 00:00:00",
"orgModifyTime": "2019-07-23 00:00:00",
"orgManager": "0979fc26b7714930a0eb74850fa391db",
"orgCode": "CS",
"contacts": "0979fc26b7714930a0eb74850fa391db",
"orgAddress": "",
"tel": "",
"areaName": null,
"areaCode": null,
"areaNamePath": null,
"areaLevel": null,
"areaSpell": null,
"areaOrder": null,
"parentAreaId": null,
"areaIdPath": null,
"mainRoleId": "18aa346a1132459895d0709a0bae20d0",
"roles": [{
"roleId": "18aa346a1132459895d0709a0bae20d0",
"roleName": "测试角色",
"orgId": "c588f0b0d75141d6be2352b54633e2e9",
"roleType": "01",
"effective": "1",
"effectiveTime": null,
"createUser": "1",
"createTime": "2021-01-04 00:00:00",
"defaultRole": "0",
"createUserName": null,
"idPath": null,
"namePath": null,
"roleSign": null,
"roleDesc": null,
"subordinate": null,
"roleMark": null,
"authority": "ROLE_18aa346a1132459895d0709a0bae20d0",
"attribute": "ROLE_18aa346a1132459895d0709a0bae20d0"
}],
"orgInfo": null,
"name": "向建新"
}
},
"errors": null,
"serviceSuccess": true,
"redirectUrl": null
}
- 将信息写入session
HttpSession session = request.getSession();
UserAccountVo vo = 通过接口获取用户信息转换为对象
//将登录信息放入session
session.setAttribute(ISecurityConstants.USER_INFO,vo);