这是一个支持RBAC权限模型的REST风格的WCF服务框架。
主要功能:
1.独立的身份验证服务,支持单点登录
2.可扩展的支持鉴权的身份验证服务
3.内置日志服务器,可通过配置日志规则实现写日志到文件或数据库
4.支持组织机构管理
5.支持用户/用户组管理
6.支持角色管理,可对角色进行操作权限(允许/拒绝)和数据权限(只读/读写)的授权,角色成员支持:用户/用户组/职位
7.支持可配置的连续流水号的业务编码(如订单号)生成
8.支持6位数字短信验证码的生成
9.可通过简单的服务注册实现多个服务的管理和扩展
接口访问形式:GET、POST、PUT、DELETE。
令牌由Request的Authorization头部承载,令牌的编码方式为Base64。
属性 | 数据类型 | 属性说明 |
---|---|---|
successful | bool | 接口调用是否成功 |
code | string | 错误代码 |
message | string | 错误消息,描述了接口调用失败原因 |
option | object | 附加数据 |
data | <T> | 接口返回数据(泛型) |
方法:GET
URL:authapi/v1.0/tokens/codes
-
令牌:无
-
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
account | string | 登录账号 |
type | int | 0、密码登录(默认);1、验证码登录 |
返回数据:一次性密钥
属性 | 数据类型 | 属性说明 |
---|---|---|
无 | string | 用以在获取Token时加密数据,5秒内有效 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": "a4edbed144df4584810ef45428db7baf"
}
方法:GET
URL:authapi/v1.0/tokens
令牌:无
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
account | string | 登录账号 |
tenantid | string | 租户ID,令牌无需鉴权时可为空 |
appid | string | 应用ID |
signature | string | 用户签名:md5(md5(account + md5(password)) + code) |
deptid | string | 登录部门ID(可为空) |
返回数据:令牌数据包
属性 | 数据类型 | 属性说明 |
---|---|---|
accessToken | string | 在接口调用时附加在请求头 |
refreshToken | string | 刷新令牌时使用 |
expiryTime | int | accessToken过期秒数,过期后可调用刷新接口刷新令牌 |
failureTime | int | accessToken失效秒数,失效后必须重新获取令牌 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"accessToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiN2YwNmYwZmIyZjAxNDU5YjliMWE3MDBhOTJiYTFhOTgifQ==",
"refreshToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiNzI3YmYyM2JhZmJhNGQ0MDk3OWU1YjZlMjRiYmQzZDYifQ==",
"expiryTime": 7200,
"failureTime": 86400
}
}
方法:PUT
URL:authapi/v1.0/tokens
令牌:refreshToken
参数:无
返回数据:令牌数据包
属性 | 数据类型 | 属性说明 |
---|---|---|
accessToken | string | 在接口调用时附加在请求头 |
refreshToken | string | 刷新令牌时使用 |
expiryTime | int | accessToken过期秒数,过期后可调用刷新接口刷新令牌 |
failureTime | int | accessToken失效秒数,失效后必须重新获取令牌 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"accessToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiN2YwNmYwZmIyZjAxNDU5YjliMWE3MDBhOTJiYTFhOTgifQ==",
"refreshToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiNzI3YmYyM2JhZmJhNGQ0MDk3OWU1YjZlMjRiYmQzZDYifQ==",
"expiryTime": 7200,
"failureTime": 86400
}
}
方法:DELETE
URL:authapi/v1.0/tokens
令牌:accessToken
参数:无
返回数据:无
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": null
}
方法:GET
URL:authapi/v1.0/tokens/secret
令牌:accessToken
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
action | string | 权限代码 |
返回数据:用户信息
属性 | 数据类型 | 属性说明 |
---|---|---|
id | string | 用户ID |
tenantId | string | 租户ID |
deptId | string | 用户当前登录部门ID |
name | string | 用户名称 |
account | string | 注册账号 |
mobile | string | 绑定手机号 |
string | 绑定邮箱 | |
remark | string | 用户备注 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"id": "71f94cb6-9247-40f8-aaef-e771b9a0961d",
"tenantId": "30a1307b-b85c-4cc5-b12f-be6a708311f4",
"deptId": null,
"name": "管理员",
"account": "2810",
"mobile": null,
"email": null,
"remark": null
}
}
方法:POST
URL:authapi/v1.0/paypws
令牌:accessToken
参数:BODY
属性 | 数据类型 | 属性说明 |
---|---|---|
code | string | 短信验证码 |
password | string | 支付密码(MD5) |
请求数据示例:
{
"code": "123456"
"password": "e10adc3949ba59abbe56e057f20f883e"
}
返回数据:无
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": null
}
方法:GET
URL:authapi/v1.0/paypws
令牌:accessToken
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
pw | string | 支付密码(MD5) |
返回数据:用户信息
属性 | 数据类型 | 属性说明 |
---|---|---|
id | string | 用户ID |
tenantId | string | 租户ID |
deptId | string | 用户当前登录部门ID |
name | string | 用户名称 |
account | string | 注册账号 |
mobile | string | 绑定手机号 |
string | 绑定邮箱 | |
remark | string | 用户备注 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"id": "71f94cb6-9247-40f8-aaef-e771b9a0961d",
"tenantId": "30a1307b-b85c-4cc5-b12f-be6a708311f4",
"deptId": null,
"name": "管理员",
"account": "2810",
"mobile": null,
"email": null,
"remark": null
}
}
方法:GET
URL:authapi/v1.0/smscodes
令牌:无
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
mobile | string | 手机号 |
type | int | 类型:0、验证手机号;1、注册用户账号;2、重置密码;3、修改支付密码;4、登录验证码 |
life | int | 过期时间(分钟),默认15分钟 |
length | int | 验证码位数,默认6位 |
返回数据:短信验证码
属性 | 数据类型 | 属性说明 |
---|---|---|
无 | string | 验证码 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": "123456"
}
备注:每客户端每10秒可访问1次
方法:DELETE
URL:authapi/v1.0/smscodes
令牌:无
参数:BODY
属性 | 数据类型 | 属性说明 |
---|---|---|
mobile | string | 手机号 |
code | string | 验证码 |
type | int | 类型:0、验证手机号;1、注册用户账号;2、重置密码;3、修改支付密码;4、登录验证码 |
remove | bool | 是否验证成功后删除记录 |
请求数据示例:
{
"code":
{
"code": "123456",
"mobile": "13958085903",
"type": 0,
"remove": true
}
}
返回数据:无
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": null
}
备注:参数相同时,每客户端每10分钟可访问1次
方法:POST
URL:userapi/v1.0/users/signup
令牌:accessToken
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
appid | string | 应用ID |
code | string | 短信验证码 |
参数:BODY
属性 | 数据类型 | 属性说明 |
---|---|---|
id | string | 用户ID,可为空,或传长度不超过36位的字符串 |
name | string | 用户名,不可为空 |
account | string | 登录账号,不可为空,唯一 |
mobile | string | 绑定手机号,可为空,唯一 |
string | 绑定邮箱,可为空,唯一 | |
password | string | 密码(MD5) |
remark | string | 用户备注(可为空) |
请求数据示例:
{
"user":
{
"name": "宣炳刚",
"account": "xbg",
"mobile": "13958085903",
"email": null,
"password": "e10adc3949ba59abbe56e057f20f883e",
"remark": null
}
}
返回数据:令牌数据包
属性 | 数据类型 | 属性说明 |
---|---|---|
accessToken | string | 在接口调用时附加在请求头 |
refreshToken | string | 刷新令牌时使用 |
expiryTime | int | accessToken过期秒数,过期后可调用刷新接口刷新令牌 |
failureTime | int | accessToken失效秒数,失效后必须重新获取令牌 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"accessToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiN2YwNmYwZmIyZjAxNDU5YjliMWE3MDBhOTJiYTFhOTgifQ==",
"refreshToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiNzI3YmYyM2JhZmJhNGQ0MDk3OWU1YjZlMjRiYmQzZDYifQ==",
"expiryTime": 7200,
"failureTime": 86400
}
}
方法:PUT
URL:userapi/v1.0/users/{id}/signature
令牌:accessToken
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
id | string | 用户ID |
参数:BODY
属性 | 数据类型 | 属性说明 |
---|---|---|
password | string | 新密码 |
请求数据示例:
{
"password": "e10adc3949ba59abbe56e057f20f883e"
}
返回数据:用户信息
属性 | 数据类型 | 属性说明 |
---|---|---|
id | string | 用户ID |
tenantId | string | 租户ID |
deptId | string | 用户当前登录部门ID |
name | string | 用户名称 |
account | string | 注册账号 |
mobile | string | 绑定手机号 |
string | 绑定邮箱 | |
remark | string | 用户备注 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"id": "71f94cb6-9247-40f8-aaef-e771b9a0961d",
"tenantId": "30a1307b-b85c-4cc5-b12f-be6a708311f4",
"deptId": null,
"name": "管理员",
"account": "2810",
"mobile": null,
"email": null,
"remark": null
}
}
方法:PUT
URL:userapi/v1.0/users/{account}/resetpw
令牌:无
参数:URL
属性 | 数据类型 | 属性说明 |
---|---|---|
account | string | 登录账号 |
参数:BODY
属性 | 数据类型 | 属性说明 |
---|---|---|
appId | string | 应用ID |
password | string | 新密码 |
code | string | 短信验证码 |
mobile | string | 手机号 |
请求数据示例:
{
"appId": "b4e8dff6-a2eb-46c6-982d-ee395a4261e0"
"password": "e10adc3949ba59abbe56e057f20f883e"
"code": "1c320d4fc1614f54800d34b86a53941e"
"mobile": "13958085903"
}
返回数据:令牌数据包
属性 | 数据类型 | 属性说明 |
---|---|---|
accessToken | string | 在接口调用时附加在请求头 |
refreshToken | string | 刷新令牌时使用 |
expiryTime | int | accessToken过期秒数,过期后可调用刷新接口刷新令牌 |
failureTime | int | accessToken失效秒数,失效后必须重新获取令牌 |
返回数据示例:
{
"successful": true,
"code": "200",
"name": "OK",
"message": "接口调用成功",
"option": null,
"data": {
"accessToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiN2YwNmYwZmIyZjAxNDU5YjliMWE3MDBhOTJiYTFhOTgifQ==",
"refreshToken": "eyJpZCI6ImE0ZWRiZWQxNDRkZjQ1ODQ4MTBlZjQ1NDI4ZGI3YmFmIiwidXNlcklkIjoiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIiwic2VjcmV0IjoiNzI3YmYyM2JhZmJhNGQ0MDk3OWU1YjZlMjRiYmQzZDYifQ==",
"expiryTime": 7200,
"failureTime": 86400
}
}