实施步骤
- 登录函数工作流控制台,在“总览”页面,单击“创建函数”。详情请参考使用函数服务开发自定义认证。
- 根据下表,填写函数信息后,单击“创建函数”。
表1 函数信息配置 参数
配置说明
函数类型
默认“事件函数”。
区域
与API网关相同区域。
项目
华为云的区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。此处默认为已选择的区域。
函数名称
根据规划自定义名称。建议您按照一定的命名规则填写名称,方便您快速识别和查找。
企业项目
企业项目是项目的升级版,针对企业不同项目间资源的分组和管理,是逻辑隔离。此处默认“default”。
委托名称
用户委托函数工作流去访问其他的云服务。此处选择“未使用任何委托”。
运行时
选择Python 3.9。
- 函数创建完成后,进入函数详情。在“设置”页签的左侧导航栏中选择“环境变量”,单击“编辑环境变量 > 添加环境变量”。参数token用于Header身份验证,test参数用于Query参数查询。对于敏感数据如token值,应开启加密参数选项。
- 在“代码”页签,编辑自定义认证代码,将以下代码复制到index.py中。完成后,单击“部署”。代码编写请参考《API网关开发指南》中的创建用于前端自定义认证的函数。
# -*- coding:utf-8 -*- import json def handler(event, context): testParameter = context.getUserData('test'); userToken = context.getUserData('token'); if event["headers"].get("token") == userToken and event["queryStringParameters"].get("test") == testParameter: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"auth success" } }) } else: resp = { 'statusCode': 401, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp)
- 配置测试事件并调试代码,然后部署。
- 根据下表,填写函数信息后,单击“创建函数”。
- 进入API网关控制台,在左侧导航栏选择“API管理 > API策略”。
在“自定义认证”页签中,创建自定义认证。
表2 自定义认证配置 参数
配置说明
认证名称
根据规划自定义名称。建议您按照一定的命名规则填写名称,方便您快速识别和查找。
类型
此处选择“前端”。
函数地址
单击“添加”,选择已创建函数。
版本或别名
默认“通过版本选择”。
缓存时间(秒)
30
身份来源
第一个身份来源参数位置选择“Header”,参数名填写“token”;第二个身份来源参数位置选择“Query”,参数名填写“test”。
- 在左侧导航栏选择“API管理 > API列表”,单击“创建API > 创建API”。
- 根据下表参数,配置前端信息。
表3 前端配置 参数
配置说明
API名称
填写API名称,建议您按照一定的命名规则填写,方便您快速识别和查找。
所属分组
默认“DEFAULT”。
URL
请求方法:接口调用方式,此处选择“GET”。
请求协议:选择API请求协议,此处选择“HTTPS”。
子域名:API分组创建后,系统为分组自动分配一个内部测试用的调试域名,此调试域名每天最多可以访问1000次。
路径:接口请求路径。此处填写“/api/two_factor_authorization”。
网关响应
API网关未能成功处理API请求,从而产生的错误响应。
默认的网关响应为“default”。
安全认证
选择API认证方式,此处选择“APP认证”。
支持双重认证
勾选后,开启双重认证。选择已创建自定义认证。
- 单击“下一步”,后端服务类型选择“Mock”。
- 发布API。
- 根据下表参数,配置前端信息。
- 在左侧导航栏选择“API管理 > 凭据管理”,创建凭据。
单击“创建凭据”,填写凭据名称后,然后单击“确定”。
- 绑定API。
单击凭据名称,进入凭据详情。在“关联API”区域,单击“绑定API”,选择API并“确定”。
- 验证。
- 您可以通过API网关的调试页面调用API,验证双重认证是否成功。
分别在Parameters和Headers中添加定义的test和token参数,参数值确保与自定义认证函数中的参数值一致。如果请求参数与自定义认证函数不一致或参数错误,服务器返回401认证不通过。
- 您可以使用curl命令调用API,需要先下载JavaScript SDK。传入Key、Secret、以及自定义的Header、Query等参数生成curl命令,然后将curl命令复制到命令行调用API,具体操作步骤请参考《API网关开发指南》中curl。
- 您可以通过API网关的调试页面调用API,验证双重认证是否成功。