Support tenant/application level AK/SK
Opened this issue · 0 comments
gudaoxuri commented
实现针对租户/应用的AK/SK授权与鉴权机制,并提供对OAuth2的部分支持,实现AccessToken的授权范围处理。
场景描述:
- 开放平台下提供应用或租户的AK、SK,实现通过OpenAPI访问相关能力
- 文件分享、Webhook等功能需要对发放的URL提供一定的权限限制
AK/SK实现逻辑:
- IAM: 添加
ci
类型的API,用于处理服务端接口调用 - IAM: 添加
IamCertKernelKind::AkSk
类型并实现cert_conf
cert
的配置 - 网关: 添加对
ak/sk
类型的验签
AccessToken实现逻辑:
- IAM:
ci
接口支持通过创建当前AK
的AccessToken
及Refresh Tokens
并能指定生效时间及授权范围(Scope)(OAuth2 Client-credentials模式: https://oauth.net/2/grant-types/client-credentials/ ) - IAM:
AccessToken
及Refresh Tokens
生效时间写入cert
表,绑定到 AK/SK对应的cert
- IAM: 建立一个名为
OAuth
的内置Set
, 把资源(授权API)绑定到该SetCate
下(Via: RbumRelFromKind::SetCate, To 资源API)并同步到缓存(对应于add_or_modify_res_rel,add_or_modify_req参数中的groups) - IAM: 授权范围(Scope) 对应
OAuth
Set的一个或多个SetCate
(Via: RbumRelFromKind::SetCate To ?)TODO - IAM:
AccessToken
及授权范围写入到iam:cache:token:info:xxx
缓存,值修改为:token_kind, rel_iam_item_id, ak, SetCateIds
- 网关: 修改Token处理的逻辑,如果 Header
Authorization
以Bearer
开头也作为Token处理,获取rel_iam_item_id的同时也获取到ak, SetCateIds,如果存在ak则忽略iam:cache:account:info:xx
直接生成ctx.ident_info
, iam_groups=SetCateIds