方案概述
- 登录FunctionGraph控制台,创建函数,并将其定义为自定义认证函数。
- 登录FunctionGraph控制台,创建一个业务函数。
- 购买APIG专享版实例,并在其中创建一个API分组,用来存放API。
- 创建一个鉴权方式为自定义认证且后端为FunctionGraph的API。
- 调试API。
构建程序
创建API分组
创建函数及添加事件源之前,需要先创建一个API分组,API分组是API的管理单元,用来存放API。
- 登录APIG控制台,右上角单击“立即购买专享版”,配置详情请参见《API网关(APIG) 快速入门》的“购买专享版实例”章节。
- 选择已创建的APIG专享版实例,并在导航栏选择“API管理 > API分组”,单击“创建API分组”。
- 选择直接创建,设置以下分组信息,完成后单击“确定”创建分组。
- 输入您自定义的分组名称,例如APIGroup_test。
- 描述:输入对分组的描述。
创建自定义认证函数
前端自定义认证指APIG利用校验函数对收到的API请求进行安全认证,如果您想要使用自己的认证系统对API的访问进行认证鉴权,您可以在API管理中创建一个前端自定义认证来实现此功能。您需要先在FunctionGraph创建一个函数,通过函数定义您所需的认证信息,函数创建成功后,即可对API网关中的API进行认证鉴权。本示例以Header中的请求参数:event["headers"],为例进行演示。
-
进入函数工作流控制台后,在左侧导航栏选择“函数 > 函数列表”,进入函数列表界面。
-
单击“创建函数”,进入创建函数流程。
-
填写函数配置信息,完成后单击“创建函数”。
- 模板:选择“使用空白模板”。
- 函数类型:事件函数。
- 函数名称:输入您自定义的函数名称,例如:apig-test。
- 委托名称:选择“未使用任何委托”。
- 运行时语言:选择“Python 2.7”。
-
进入函数详情页,在“代码”页签,进行代码在线编辑。
-
配置测试事件,测试用于前端自定义认证的函数。单击“配置测试事件”,选择事件模板。根据实际情况修改后保存测试模板(本示例在"headers"中添加"auth":"abc"),完成后单击“创建”。
图 配置测试事件
-
单击“测试”,执行结果为“成功”时,表示自定义认证函数创建成功。
创建自定义认证
在APIG中创建自定义认证,对接前端自定义认证的函数。
- 选择已创建的APIG专享版实例,并在航栏选择“API管理 > API策略”,在“自定义认证”页签下,单击“创建自定义认证”,弹出“创建自定义认证”对话框。
- 配置自定义认证基础信息,如下图所示。
- 认证名称:输入您自定义的名称,例如Authorizer_test。
- 类型:选择“前端”。
- 函数地址:请选择用于前端自定义认证的函数apig-test。
- 完成后单击“确定”,完成自定义认证的创建。
创建后端业务函数
API网关(APIG)支持选择FunctionGraph作为后端服务类型,当请求设置函数工作流为后端服务的API时,API网关会触发相应的函数,函数工作流会将执行结果返回给API网关(APIG)。
- 创建函数方法与上述创建自定义认证函数相同,只需修改函数名称,避免名称重复。
- 在函数详情页的“代码”页签,进行代码在线编辑,并传入如下所示的代码,完成后单击“部署”,更新函数。
-- coding:utf-8 --
import json
def handler (event, context):
body ="<html><title>Functiongraph Demo</title><body><p>Hello,
FunctionGraph!</p></body></html>"
print(body)
return {
"statusCode":200,
"body":body,
"headers": {
"Content-Type":"text/html",
},
"isBase64Encoded":False
}
请求参数代码定义示例
在FunctionGraph中开发函数,以python2.7语言为例,函数代码需要满足如下条件。函数有明确的接口定义,如下所示:
-
def handler (event, context)
- 入口函数名(handler):入口函数名称,需和函数执行入口处用户自定义的入口函数名称一致。
- 执行事件(event): 函数执行界面由用户输入的执行事件参数,格式为JSON对象。
- 上下文环境(Context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明,详情请参见《函数工作流(FunctionGraph) 用户指南》的“Python > 开发事件函数”章节。
-
执行事件(event)支持三种请求参数定义,格式为:
- Header中的请求参数:event["headers"]["参数名"]
- Query中的请求参数:event["queryStringParameters"]["参数名"]
- 您自定义的用户数据:event["user_data"]
-
函数代码获取的三种请求参数与API网关自定义认证中的参数关系如下所示:
- Header中的请求参数:对应自定义认证中参数位置为Header的身份来源,其参数值在您调用使用该前端自定义认证的API时传入
- Query中的请求参数:对应自定义认证中参数位置为Query的身份来源,其参数值在您调用使用该前端自定义认证的API时传入
- 您自定义的用户数据:对应自定义认证中的用户数据,其参数值在您创建自定义认证时输入
- 函数的返回值不能大于1M,必须满足如下格式:
{ "statusCode":200, "body":"{\"status\": \"allow\", \"context\":{\"user\": \"abc\"}}" }
其中,body字段的内容为字符串格式,json解码之后为:
{
"status":"allow/deny",
"context": {
"user": "abc"
}
}
“status”字段为必选,用于标识认证结果。只支持“allow”或“deny”,“allow”表示认证成功,“deny”表示认证失败。“context”字段为可选,只支持字符串类型键值对,键值不支持JSON对象或数组。context中的数据为您自定义的字段,认证通过后作为认证参数映射到API网关后端参数中,其中context中的参数名称与系统参数名称必须完全一致,且区分大小写,context中的参数名称必须以英文字母开头,支持英文大小写字母、数字、下划线和中划线,且长度为1 ~ 32个字符。
添加事件源
创建API
API分组、自定义认证函数、后端函数均创建成功以后,可以创建API,设置安全认证为自定义认证,并定义后端服务类型为FunctionGraph,步骤如下。
- 登录APIG控制台,选择已创建的APIG专享版实例,并在导航栏选择“API管理 > API列表”,单击右上方的“创建API”。
- 配置API基本信息。
- API名称:输入您自定义的名称,例如API_test。
- 所属分组:请选择上述操作中创建的API分组“APIGroup_test”。
- URL:请求方法选择“ANY”,请求协议选择“HTTPS”,请求路径填写“/testAPI”。
- 网关响应:选择“default”。
- 安全认证:选择“自定义认证”。
- 自定义认证:选择上述操作中创建的自定义认证“Authorizer_test”。
- 单击“下一步”,进行后端配置。
- 后端服务类型:选择“FunctionGraph”
- 函数URN:添加创建的业务函数
- 版本或别名:选择“latest”版本
- 调用类型:选择“Synchronous”
- 单击下一步,完成API创建。
- 继续在当前页面,单击“发布”,将已创建的API发布至RELEASE环境。
调试并调用API
API网关提供了在线调试的功能,因此一般建议在API网关上完成API配置之后,可以先通过此功能确认API是否配置成功。
- 登录APIG控制台,选择已创建的APIG专享版实例,并左导航栏选择“API管理 > API列表”,单击进入已创建的API“API_test”,右上角单击“调试”。
- 在本案例中,需要添加Headers参数,完成后单击“调试”。
- 参数名:输入“auth”
- 参数值:输入“abc”
- API返回内容即为前面步骤中创建的业务函数返回内容。