统一权限#
arkid支持第三方应用,通过输出自身的接口文档,arkid这边通过读取应用本身接口文档,可以在arkid中方便灵活的管理权限。
接入步骤#
1.需要准备一个可以读取的openapi.json访问地址,json中至少要有permissions节点,permissions中要含有基础的角色信息,以及接口信息。下面提供了一个含有permissions节点的例子,可以作为参考:
{
"permissions":[
{
"name":"customer",
"sort_id":0,
"type":"group",
"container":[
3,
6
]
},
{
"name":"tenant-admin",
"sort_id":1,
"type":"group",
"container":[
4
]
},
{
"name":"platform-admin",
"sort_id":2,
"type":"group",
"container":[
5
]
},
{
"name":"app列表",
"sort_id":3,
"type":"api",
"container":[
],
"operation_id":"api_v1_views_app_list_apps"
},
{
"name":"创建应用",
"sort_id":4,
"type":"api",
"container":[
],
"operation_id":"api_v1_views_app_create_app"
},
{
"name":"公开app列表",
"sort_id":5,
"type":"api",
"container":[
],
"operation_id":"api_v1_views_app_list_open_apps"
},
{
"name":"获取app",
"sort_id":6,
"type":"api",
"container":[
],
"operation_id":"api_v1_views_app_get_app"
}
]
}
参数名称 | 参数说明 |
---|---|
name |
名称 |
sort_id |
排序id(开发者自行生成) |
type |
类型(api 或 group) |
container |
包含接口的sort_id(只有在group类型中才有值) |
operation_id |
操作id(只有api类型才有这个字段) |
2.需要在应用管理菜单下的应用列表,新建一个应用
3.需要对应用进行协议配置,这里以OIDC类型的应用为例
4.需要对应用进行开放API配置
如何使用#
1.可以在权限管理菜单下,授权管理菜单下的所有应用页面中,把已经读取到的权限,授权给其它租户的人使用。
补充说明
权限的分配是逐级向下的,一般授权开启时,除要开启的权限外,会打开应用入口权限,防止其它租户的用户无法进行登录
授权开启:该权限被授权给其它租户使用,其它租户的管理员是最先拥有该权限的,其它租户管理员可以对自己拥有的权限进行二次分配。
授权关闭:该权限如果从开启状态切换到关闭状态,则已经分配给其它租户的权限,将被收回,包括其它租户二次分配的。
2.除了授权给其它租户使用外,也可以在本租户内,进行用户权限赋予
如何获取用户的权限字符串#
1.访问应用列表,编辑应用,获取参数信息
英文参数名称 | 对应页面字段 |
---|---|
redirect url |
回调地址 |
client_id |
客户端id |
client_token |
客户端秘钥 |
authorize url |
授权url |
get token url |
获取access_token地址 |
userinfo url |
用户信息地址 |
logout url |
退出登录地址 |
2.获取Authorization Code
- 请求地址:
authorize url
- 请求方式: GET
- 请求参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
client_id |
client_id |
|
redirect_uri |
redirect url |
|
response_type |
填入code | code |
scope |
填入 (openid userinfo) |
- 请求示例: http://authorize url/?client_id=xxxxx&redirect_uri=xxxxx&response_type=code&scope=userinfo
- 返回参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
code |
授权码 |
- 返回示例: http://redirect_uri?code=XEV8esOvaVk9wyAuiNXpb3Nuwn5av9&token=cd34840ffc804b894ede31bc21b176ef559e137f
3.获取Access Token
- 请求地址:
get token url
- 请求方式: POST
- 请求头参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
Authorization |
token格式为 client_id:client_secret 使用base64编码 | Basic Token |
Content-Type |
填入multipart/form-data |
- 请求参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
code |
授权码 | |
grant_type |
填入authorization_code |
- 请求示例:
- 返回参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
access_token |
令牌 | |
expires_in |
过期时间 | |
token_type |
Bearer | |
scope |
userinfo openid | |
refresh_token |
用于更新令牌的令牌 | |
id_token |
id_token |
- 返回示例:
{ "access_token": "nRmo1Ko5UbStrtBNtySnUi8Ezw9YBm", "expires_in": 36000, "token_type": "Bearer", "scope": "openid userinfo", "refresh_token": "na3bP6WX3JzZynqLSJS8wI4m6zWiC9", "id_token": "eyJhbGciOiAiUlMyNTYiLCAidXNlIjogInNpZyIsICJraWQiOiAiRjlYSlg3N0VkTjVnNnA5Q3ZnS1NnTW9GRTh4cjNJeWp6aUNLTnR3enhWTSIsICJlIjogIkFRQUIiLCAia3R5IjogIlJTQSIsICJuIjogImlFNFkyMDhLV0x1QzhLcWZLQU96NmctaUlfeHNLU3hTYmoyMWxXbmdnMmwtay01b2ZKaVRDQklKZjFTR1dyQ3hfRXNGT1ptZUxEM29xcE96WUNhdFZ3NlBlNnVacFJhRFZSekFoOV9Da00waUFWclc2bHB4QkowSFlxZ1d3cHBpSG15M2VEbkg2V3lGVkNQUFhKd3F1MU5ETlludENqcUtWa2gxamotdjktVSJ9.eyJhdWQiOiAiQXJkeHJwajVVb0JmUUNiN1F4TDE1RG9YR2ozcHpOeHFkeFl2U1YxeCIsICJpYXQiOiAxNjYwMTE1MDU4LCAiYXRfaGFzaCI6ICJqa19ET1M0MFNnT3Fubk91QzhjeHdnIiwgInN1YiI6ICJmYWY1YWFlNi0zY2RmLTQ1OTUtOGI0YS0zYTA2YjMxMTE3YzgiLCAic3ViX2lkIjogImZhZjVhYWU2LTNjZGYtNDU5NS04YjRhLTNhMDZiMzExMTdjOCIsICJwcmVmZXJyZWRfdXNlcm5hbWUiOiAiYWRtaW4iLCAiZ3JvdXBzIjogWyJ0ZW5hbnRfYWRtaW4iXSwgInRlbmFudF9pZCI6ICI0ZGExMTRjZS1lMTE1LTQ0YTAtODIzYi1kMzcyMTE0NDI1ZDAiLCAidGVuYW50X3NsdWciOiAiIiwgImlzcyI6ICJodHRwOi8vbG9jYWxob3N0OjgwMDAvYXBpL3YxL3RlbmFudC80ZGExMTRjZS1lMTE1LTQ0YTAtODIzYi1kMzcyMTE0NDI1ZDAiLCAiZXhwIjogMTY2MDE1MTA1OCwgImF1dGhfdGltZSI6IDE2NjAxMTUwNTh9.Xcz9d79UdPAVtiObwkauIPVodQtDK8ZX9zYBhTgmjs5_lQhlgzCeUZPeUJCsIb_3AR9BChDw_EDYzwFhg1h4vYofYlRk4V9wHZypbRoDFopm343h78JbzGeexFiRhE_e4zIPmVsQj925TpMuMOP4zLKX3U6pTPJETflrvblXcUs" }
4.获取权限字符串
- 请求地址:
/api/v1/app/permission_result
- 请求方式: GET
- 请求头参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
ID-TOKEN |
获取access_token接口返回的id_token | xxxxx |
- 返回参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
result |
用户权限字符串(1是有权限,0是没权限,每位与接口文档中的sort_id对应) |
- 返回示例: