Skip to content

统一权限#

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.需要在应用管理菜单下的应用列表,新建一个应用

vlq2Ct.md.jpg

3.需要对应用进行协议配置,这里以OIDC类型的应用为例

vlL1RP.md.jpg

补充说明
目前只支持OIDC类型,或者Oauth2类型的应用。其它类型的应用无法使用获取权限字符串的功能

4.需要对应用进行开放API配置

vlLysU.md.jpg

补充说明
如果接口文档中的permissions内容有变更,需要更改应用版本,第一次配置时除外

如何使用#

1.可以在权限管理菜单下,授权管理菜单下的所有应用页面中,把已经读取到的权限,授权给其它租户的人使用。

vljsQP.md.jpg

补充说明
权限的分配是逐级向下的,一般授权开启时,除要开启的权限外,会打开应用入口权限,防止其它租户的用户无法进行登录
授权开启:该权限被授权给其它租户使用,其它租户的管理员是最先拥有该权限的,其它租户管理员可以对自己拥有的权限进行二次分配。
授权关闭:该权限如果从开启状态切换到关闭状态,则已经分配给其它租户的权限,将被收回,包括其它租户二次分配的。

2.除了授权给其它租户使用外,也可以在本租户内,进行用户权限赋予

vlvrtJ.md.jpg

如何获取用户的权限字符串#

1.访问应用列表,编辑应用,获取参数信息

v3A13T.md.jpg

英文参数名称 对应页面字段
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
  • 请求示例:

XoX9Z4.md.jpg

  • 返回参数:
参数名称 参数说明 示例
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对应)
  • 返回示例:
    {
        "result":"11111"
    }
    

评论