- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- APIG业务使用流程
- 创建用户并授权使用APIG
- 创建APIG实例
- 开放API
- 配置API调用授权(可选)
- 调用API
-
管理API
- 管理API概述
- 查看或编辑APIG的API信息
- 配置API的自定义认证
- 配置API的参数编排规则
- 自定义API的错误响应信息
- 克隆APIG的API
- 下线APIG的API
- 导入导出API
-
APIG的API设计文件扩展定义
- x-apigateway-auth-type
- x-apigateway-request-type
- x-apigateway-match-mode
- x-apigateway-cors
- x-apigateway-is-send-fg-body-base64
- x-apigateway-any-method
- x-apigateway-backend
- x-apigateway-backend.parameters
- x-apigateway-backend.httpEndpoints
- x-apigateway-backend.httpVpcEndpoints
- x-apigateway-backend.functionEndpoints
- x-apigateway-backend.mockEndpoints
- x-apigateway-backend-policies
- x-apigateway-backend-policies.conditions
- x-apigateway-ratelimit
- x-apigateway-ratelimits
- x-apigateway-ratelimits.policy
- x-apigateway-ratelimits.policy.special
- x-apigateway-access-control
- x-apigateway-access-controls
- x-apigateway-access-controls.policy
- x-apigateway-plugins
- x-apigateway-auth-opt
- x-apigateway-result-normal-sample
- x-apigateway-result-failure-sample
- x-apigateway-authorizer
- x-apigateway-response
- x-apigateway-responses
- x-apigateway-pass-through
- x-apigateway-sample
- x-apigateway-content-type
- x-apigateway-orchestrations
- 配置API策略
- 配置凭据策略
- 管理APIG实例
- 查看监控指标与配置告警
- 查看APIG审计日志
- 共享版操作指导(仅存量用户使用)
- 最佳实践
- 开发指南
-
API参考
- 使用前必读
- API概览
- 如何调用API
-
专享版API(V2)
- 专享版-API分组管理
- 专享版-环境管理
- 专享版-环境变量管理
- 专享版-流控策略管理
- 专享版-API管理
- 专享版-签名密钥管理
- 专享版-签名密钥绑定关系管理
- 专享版-API绑定流控策略
- 专享版-设置特殊流控
- 专享版-APP授权管理
- 专享版-概要查询
- 专享版-域名管理
- 专享版-ACL策略管理
- 专享版-API绑定ACL策略
- 专享版-自定义认证管理
- 专享版-OpenAPI接口
- 专享版-VPC通道管理
- 专享版-监控信息查询
- 专享版-分组自定义响应管理
- 专享版-标签管理
- 专享版-实例特性管理
- 专享版-配置管理
- 专享版-实例管理
- 专享版-实例终端节点管理
- 专享版-实例标签管理
- 专享版-微服务中心管理
- 专享版-SSL证书管理
- 专享版-插件管理
- 专享版-凭据管理
- 专享版-凭据配额管理
- 专享版-异步任务管理
- 专享版-编排规则管理
- 专享版-实例自定义入方向端口管理
- 共享版API(仅存量用户使用)
- 专享版API(V1)(待下线)
- 权限策略和授权项
- 附录
- 修订记录
- SDK参考
- 场景代码示例
-
常见问题
- 热门咨询
- 产品咨询
- 开放API
- 发布API
-
调用API
- 调用API失败的可能原因
- 调用API报“414 Request URI too large”
- 调用API报“The API does not exist or has not been published in the environment”
- 调用API报“No backend available”
- API的后端服务报“Backend unavailable”或“Backend timeout”
- API的后端服务报“Backend domain name resolution failed”
- 调用API报“Incorrect IAM authentication information”
- 调用API报“Incorrect app authentication information”
- 修改API后端服务的超时时间上限“backend_timeout”后未生效
- APIG对API请求体的大小是否有限制?
- API调用对请求的响应消息体限制
- 使用iOS系统时,如何使用APP认证调用API?
- 新建一个华为IAM认证方式的API,在配置入参时为什么无法配置HEADER位置的x-auth-token?
- 是否支持移动应用调用API?
- 部署在VPC下的应用是否可以调用API?
- APIG是否支持WebSocket数据传输?
- API的策略后端有多个时,怎么匹配和执行API请求?
- 如何通过APIG访问公网后端服务?
- API认证
- API策略
- 导入导出API
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
使用APIG的APP认证和自定义认证实现API的双重认证
应用场景
双重认证指用户根据业务需求自定义API认证策略,再结合APP认证/IAM认证,从而实现API的双重认证方式,保障API的安全性。本文以API前端认证使用APP认证和自定义认证结合场景为例,具体说明如何创建使用双重认证的API。
方案优势
在API网关提供的安全认证模式下,用户可根据业务需求,灵活实现自定义认证,保障API的安全性。
约束与限制
API网关支持的自定义认证依赖于函数工作流服务,创建自定义认证前,需要先创建函数。
操作流程
实施步骤
- 登录函数工作流控制台,在“总览”页面,单击“创建函数”。
- 根据下表,填写函数信息后,单击“创建函数”。
表1 函数信息配置 参数
配置说明
选择创建方式
默认“创建空白函数”。
函数类型
默认“事件函数”。
区域
与API网关相同区域。
项目
华为云的区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。此处默认为已选择的区域。
函数名称
根据规划自定义名称。
企业项目
企业项目是项目的升级版,针对企业不同项目间资源的分组和管理,是逻辑隔离。此处默认“default”。
委托名称
用户委托函数工作流去访问其他的云服务。此处选择“未使用任何委托”。
运行时
选择Python 3.9。
- 函数创建完成后,进入函数详情。在“设置”页签的左侧导航栏中选择“环境变量”,根据下表参数说明,单击“编辑环境变量 > 添加环境变量”。
表2 设置环境变量 参数
配置说明
键
环境变量的名称,此处添加“token”和“test”两个环境变量。token用于Header身份验证,test参数用于Query参数查询。
值
环境变量的值,token值填写为“Basic dXNlcjE6cGFzc3dvcmQ=”,test填写为“user@123”。
加密参数
开启加密参数后,环境变量的值将以“*”号加密显示,参数传输过程中键值也处于加密状态。对于敏感数据token值,开启加密参数选项。
- 在“代码”页签,编辑自定义认证代码,将以下代码复制到index.py中。完成后,单击“部署代码”。代码编写请参考创建用于前端自定义认证的函数。
# -*- 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策略”。
在“自定义认证”页签中,创建自定义认证。
表3 自定义认证配置 参数
配置说明
认证名称
根据规划自定义名称。
类型
此处选择“前端”。
函数地址
单击“添加”,选择已创建函数。
版本或别名
默认“通过版本选择”。
缓存时间(秒)
30
身份来源
第一个身份来源参数位置选择“Header”,参数名填写“token”;第二个身份来源参数位置选择“Query”,参数名填写“test”。
- 在左侧导航栏选择“API管理 > API列表”,单击“创建API > 创建API”。
- 根据下表参数,配置前端信息。
表4 前端配置 参数
配置说明
API名称
填写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,验证双重认证是否成功。