文档首页 > > 开发指南> 创建用于后端自定义认证的函数

创建用于后端自定义认证的函数

分享
更新时间:2020/05/13 GMT+08:00

操作场景

如果您需要使用一种认证机制对接多个不同的外部认证系统,实现对于后端服务的保护,您可以通过API网关中的后端自定义认证实现此功能。在使用后端自定义认证对后端请求进行认证授权前,您需要先在FunctionGraph创建一个函数,通过函数定义您所需的认证信息。函数作为自定义认证的后端函数,对API网关中的API进行认证授权。

图1 后端自定义认证示意图

使用自定义认证调用API的流程如下图所示:

图2 使用自定义认证调用API

自定义认证依赖函数服务。如果当前Region没有上线函数服务,则不支持使用自定义认证。

操作步骤

  1. 在FunctionGraph中开发函数。

    下面以python语言为例,函数代码需要满足如下条件:

    • 函数代码只支持您自定义的用户数据,且它的格式为:event["user_data"]。
    • 函数代码获取的请求参数与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个字符。

      图3所示,后端认证通过后,context中的user的值abc映射到后端服务Header位置的test参数中,并将其传递给API的后端服务。

      图3 认证参数映射到后端参数

    用户数据定义代码示例

    # -*- coding:utf-8 -*-
    import json
    import base64
    def handler(event, context):
        token=base64.b64encode(event["user_data"])
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"allow",
                "context":{
                    "token":token
                }
            })   
        }
        return json.dumps(resp)

  2. 测试函数。在测试事件的“事件模板”中选择“空白模板”,内容为:

    {"user_data": "123"}

    根据实际情况修改后保存测试模板,单击“测试”。

    执行结果为“成功”时,表示测试成功。

    接下来您需要进入API网关界面创建后端自定义认证。

    图4 测试函数

后续操作

在自定义认证中已经创建完成用于后端自定义认证的Function API,下一步您需要进入API网关中创建后端自定义认证

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问