如何控制接口访问权限
什么是业务权限凭证
业务权限凭证用于控制接口的访问权限。AstroZero提供了两种方式对API接口访问权限的控制:配置自定义接口前置脚本和配置API接口的业务权限凭证。优先通过自定义接口前置脚本进行权限验证,根据脚本的返回值判断下一步的操作。
对于配置了业务权限凭证的接口,需要在权限的“业务权限凭证”页签中接入相应的业务权限凭证,才可调用API接口。若平台用户没有配置业务权限凭证,则继续校验Profile权限中的数据权限(例如执行服务编排、执行脚本、对象的增删改查、API读、API写权限)。若业务用户没有配置业务权限凭证,调用接口直接报错,不会继续校验Profile权限中的数据权限。
对于未配置了业务权限凭证的接口,则需要查看内置系统参数“bingo.permission.customapi.check”取值,该参数控制公共接口未绑定业务权限凭证时的逻辑。
- 若该参数取值为“是”,公共接口未绑定业务权限凭证时,业务用户无法访问该接口;对于平台用户,则继续校验Profile权限中的数据权限。
- 若该参数取值为“否”,公共接口未绑定业务权限凭证时,业务用户可直接访问该接口,无需鉴权;对于平台用户,则继续校验Profile权限中的数据权限。
例如:运行环境或者沙箱环境中,该内置参数配置为“是”,接口未绑定业务权限凭证,即使在权限设置中勾选“API读”与“API写”权限,业务用户也无法操作对象数据;若业务用户需要操作对象数据,请将该内置参数配置为“否”。
如何配置业务权限凭证
- 参考登录经典应用设计器中操作,登录经典版应用设计器。
- 在页面左下方,单击“配置”。
图2 选择配置
- 在“业务权限凭证”页签,单击“新建”,新建业务权限凭证。
图3 新建业务权限凭证
- 查看需要配置业务权限凭证的API接口,单击业务权限凭证的“编辑”,将相应的权限凭证添加到右侧选择框中,单击“保存”。
图4 API接口绑定业务权限凭证
- 在经典版开发环境首页,单击“管理”,进入管理中心。
图5 选择管理
- 在左侧导航栏中,选择“用户管理 > 权限配置”。
在权限列表中查看需要配置业务权限凭证的权限详情,在“业务权限凭证”页签,将相应的业务权限凭证进行编辑,勾选“可接入”选项。图6 权限绑定业务权限凭证
- 选择“用户管理 > 用户”或“用户管理 > 业务用户”,对平台用户或业务用户配置相应的权限,该用户即可获取调用相应API接口的权限,否则将无法通过API接口的业务权限凭证校验。
AstroZero对用户和业务用户在业务权限凭证校验的处理有所不同。平台用户在业务权限凭证校验失败后会进行下一步的权限校验,如果后续校验通过仍可以调通API接口,业务用户则在业务权限凭证校验失败时直接报错,终止操作。
如何通过脚本控制接口访问权限
- AstroZero提供了示例自定义接口前置脚本,可以仿造示例代码进行脚本的编写。
图7 创建示例自定义接口前置脚本
您可以在自定义接口前置脚本中进行自定义的权限校验,并根据校验结果返回相应的result值。export class Output { @action.param({ type: "Number"}) result: decimal.Decimal; } const PASS = decimal.newWithExponent(1, 0); const BANNED = decimal.newWithExponent(0, 0); const FALLBACK = decimal.newWithExponent(-1, 0);
自定义接口前置脚本输出参数result含义如下:- PASS--{"result":1}:校验通过,直接放行。
- BANNED--{"result":0}:校验不通过,无法调用。
- FALLBACK--{"result":-1}:校验通过,但还需要进行后续权限校验。
开发自定义接口前置脚本时,出参可按照示例自定义接口前置脚本代码中的表达式也可自行定义,但必须确保出参为“-1”、“0”和“1”中的某一值,否则作为校验不通过处理。
- 单击左下角的“服务”,在服务管理页面,单击“编辑”,将校验方式改为“与脚本绑定”,在“前置处理”中选择相应的自定义接口前置脚本。
- 前置处理:一般是授权处理脚本,在访问自定义接口前,需要进行授权处理。
- 后置处理:一般是敏感错误信息或者统计日志处理脚本,后置脚本没有返回参数,无论执行成功或失败都不影响自定义接口的请求处理流程。
图8 自定义访问控制
图9 绑定自定义接口前置脚本