云服务器内容精选

  • 应用场景 gRPC是RPC(远程过程调用)的一种,只需定义每个API的Request和Response,剩下的gRPC框架就可以完成。它的典型特征就是使用protobuf(protocol buffers)作为其接口定义语言(Interface Definition Language,缩写IDL),同时底层的消息交换格式也是使用protobuf。 当用户使用gRPC服务时,可以通过API网关创建API,实现gRPC服务的路由转发。
  • 编写自定义认证函数 在 函数工作流 的控制台编写函数,自定义认证的代码编写指南参见创建用于前端自定义认证的函数。 在函数工作流页面创建一个函数,语言选Python 3.6。 表1 函数信息配置 参数 配置说明 函数类型 默认“事件函数”。 区域 与API网关相同区域。 函数名称 根据规划自定义名称。建议您按照一定的命名规则填写名称,方便您快速识别和查找。 委托名称 用户委托函数工作流去访问其他的云服务。此处选择“未使用任何委托”。 企业项目 默认“default”。 运行时 选择Python 3.6。 在“代码”页签,将以下代码复制到index.py中(如果您使用的是专享版网关,并且实例支持authorizer_context_support_num_bool特性,那么context中的value的类型可以为boolean类型或number类型)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # -*- coding:utf-8 -*- import json def handler(event, context): #以下表示认证信息匹配正确,则返回用户名, if event["headers"]["authorization"]=='Basic dXN****cmQ=': return { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user_name":"user1" } }) } else: return { 'statusCode': 200, 'body': json.dumps({ "status":"deny", "context":{ "code": "1001", "message":"incorrect username or password", "authorizer_success": "false" } }) }
  • 映射后端参数 如果认证通过,函数返回的context信息,可以传到后端,配置方式如下: 编辑API,在后端服务页面,添加系统参数,参数类型为前端认证参数,系统参数名称填自定义认证函数中context中的字段,后端参数名称和位置填需要传入到后端请求的参数名和位置。 编辑和发布完成之后,使用正确的认证信息调用API,可以看到后端打印了X-User-Name头,值为函数代码中写入到context中的user_name字段的用户名。
  • 设置错误响应 调用API如果输入错误的认证信息,则返回结果如下: 1 {"error_msg":"Incorrect authentication information: frontend authorizer","error_code":"APIG.0305","request_id":"36e42b3019077c2b720b6fc847733ce9"} 为了让API响应结果为函数中返回的context中的字段(如果您使用的是专享版网关,并且实例支持authorizer_context_support_num_bool特性,那么context中的value的类型可以为boolean类型或number类型),需要修改网关响应模板。在API所在的分组中,“分组信息”页签下的“网关响应”区域,编辑自定义认证失败的响应详情,将响应状态码改为401,将消息模板改为(引用变量为boolean类型或number类型时,变量不需要加双引号): 1 {"code":"$context.authorizer.frontend.code","message":"$context.authorizer.frontend.message", "authorizer_success": "$context.authorizer.frontend.authorizer_success"} 2 修改之后,调用API传入错误的认证信息,返回状态码为401,返回结果如下: 1 {"code":"1001","message":"incorrect username or password","authorizer_success": "false"}
  • 简介 本手册基于华为云API网关实践所编写,用于指导如何为API添加自定义认证。 在API的安全认证方面,API网关提供 IAM 认证、APP认证等方式,帮助用户快速开放API,同时API网关也支持用户使用自己的认证方式(以下简称自定义认证),以便更好地兼容已有业务能力。 API网关支持的自定义认证需要借助函数工作流服务实现,用户在函数工作流中创建自定义认证函数,API网关调用该函数,实现自定义认证。下面以Basic认证为例,介绍如何使用函数服务实现自定义认证。
  • 验证 使用接口测试工具调用已创建的API,或者在客户端调用已创建的API。 填写API所属分组的调试 域名 。 导入服务端的proto文件。 此处的proto文件如下: syntax = "proto3"; package helloworld; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; } helloworld:包名 Greeter:服务名 SayHello:方法名 HelloRequest:请求体 HelloReply:响应体 参考proto文件在“message”区域中填写API的Request。 { "name": "world" } 单击“Invoke”发送请求。 在“Response”区域中返回API的Response,且状态码显示“0 OK”,表示调用成功。
  • 配置API后端 前端设置完成后,单击“下一步”,进入后端设置页面。 设置“默认后端”的后端服务类型为“Mock”类型,Mock返回结果填写“默认后端”。 单击根据下表添加策略后端。 表2 配置策略后端 参数 配置说明 后端策略名称 填写后端策略名称,建议您按照一定的命名规则填写,方便您快速识别和查找。 后端服务类型 此处选择“Mock”。 Mock返回结果 此处填写“策略后端”。 策略条件 条件来源:选择“系统参数-前端认证参数”。 参数名称:填写前提条件已创建自定义认证函数返回体中context字段下的 "authstatus1"。 条件类型:选择“相等”。 条件值:填写前提条件已创建自定义认证函数返回体中context字段下的“False”。 单击“完成”,完成创建API。
  • 调试API 为了方便观察,在创建策略后端时后端服务类型选择“Mock”,并且设置Mock返回结果。如果策略后端的后端服务类型为其他,可以观察对应的后端地址是否被成功访问。 在“API运行”页面单击“调试”,调试已创建的API。 响应结果中显示“200 OK”,表示API调用成功,并且返回值中有“策略后端”字样,表示设置的策略后端的匹配条件成功匹配到前端自定义认证函数返回体中的context字段中的键值对,API调用策略后端成功。 在“API运行”页面,单击“编辑”,进入API设置页面。 单击“下一步”,进入API的后端设置页面,修改已添加策略后端的策略条件值为“True”。 单击“完成”,完成API的编辑。 再次调试API。 由于此时设置的策略后端的参数和条件值没有匹配到前端自定义认证函数返回体中context字段下的任意键值对,因此,无法通过前端自定义认证参数匹配到API的策略后端,此时API的响应结果显示“200 OK”,但是返回值为“默认后端”,表示此时调用的是API的默认后端。
  • 操作流程 配置API前端 在API的前端设置页面选择安全认证方式为“自定义认证”或使用双重认证(APP认证或IAM认证),并选择指定的自定义认证对象,如果没有,则需要创建自定义认证。 配置API后端 在API的后端设置页面添加策略后端,策略条件的条件来源选择“系统参数-前端认证参数”,并完善参数名称、条件类型、条件值等,其中参数名称和条件值要与前端自定义认证函数返回值中context字段下的键值对一致。 调试API 调试API,观察是否成功调用到已添加的策略后端。 父主题: 通过匹配系统参数-前端认证参数调用API的策略后端
  • 专享版API概览 API网关专享版接口的分类与说明如表1所示。 表1 专享版API概览 类型 说明 API分组管理 包括API分组的创建、修改、删除、查询详情和列表等接口。 环境管理 包括环境的创建、修改、删除和查询列表等接口。 环境变量管理 包括环境变量的新建、修改、删除、查询详情和列表等接口。 流控策略管理 包括流控策略的创建、修改、删除、查看详情和列表等接口。 API管理 包括API的创建、修改、删除、发布或下线、查询、调试、切换版本、校验API定义等接口。 签名密钥管理 包括签名密钥的创建、修改、删除和查询等接口。 签名密钥绑定关系管理 包括签名密钥的绑定、解绑、查询API绑定的密钥列表、查看密钥绑定/未绑定的API列表。 API绑定流控策略 包括绑定、解绑、批量解绑API与流控策略的关系,查看流程策略绑定/未绑定的API列表,查看API绑定的流控策略列表。 设置特殊流控 包括创建、修改、删除特殊流控策略,查看特殊设置列表。 APP授权管理 包括APP授权、解除授权,查看APP已绑定/未绑定的API列表,查看API已绑定的APP列表。 概要查询 包括查询API概况、API分组概况、APP概况。 域名管理 包括域名的绑定、修改、解绑。域名证书的绑定、删除、查看。 ACL策略管理 包括ACL策略的创建、修改、删除、批量删除,查看ACL策略详情、查询ACL策略列表。 API绑定ACL策略 包括将API与ACL策略绑定、解绑、批量解绑,查看ACL策略绑定/未绑定的API列表,查看API绑定的ACL策略列表。 自定义认证管理 包括自定义认证的创建、修改、删除,查看自定义认证详情,查询自定义认证列表。 OpenAPI接口 包括API的导出、导入。 VPC通道管理 包括: VPC通道的创建、更新、删除、查看,查询VPC通道列表。 后端实例的添加、查看、删除。 后端服务器状态的批量修改。 VPC通过健康检查的修改。 后端服务器组的添加、更新、删除、查看,查询VPC通道后端服务器组列表。 监控信息查询 包括查询最近一段时间的API统计信息,查询最近一小时内的分组统计信息。 分组自定义响应管理 包括分组自定义响应的创建、查询、修改、删除,查询分组自定义响应列表,查看、修改分组下指定错误类型的自定义相应,删除分组指定错误类型的自定义响应配置。 标签管理 包括标签列表的查询。 实例特性管理 包括实例特性的配置,查看实例特性列表。 配置管理 包括查看某实例的租户配置列表,查询租户实例配置列表。 实例管理 包括: 实例的创建、更新、查看、删除,查看实例创建进度,查询实例列表。 EIP的绑定、解绑。 实例公网出口的开启、关闭,更新实例公网出口带宽。 查看可用区信息。 实例的规格变更。 查看实例约束信息。 实例终端节点管理 包括: 查询实例终端节点连接列表。 查询实例终端节点服务的白名单列表。 接受/拒绝终端节点连接。 批量添加/删除实例终端节点白名单。 实例标签管理 包括实例标签的添加、删除和查询。 微服务中心管理 包括导入微服务。 SSL证书管理 包括: 证书的创建、删除、修改、查看,获取SSL证书列表。 域名绑定/解绑SSL证书。 SSL证书绑定/解绑域名 获取SSL证书已绑定的域名列表。 插件管理 包括: 插件的创建、修改、删除、查看,查询插件列表。 插件绑定/解绑API。 API绑定/解绑插件。 查询插件/API下绑定的API/插件。 查询可绑定当前插件的API,查询可绑定当前API的插件。 APP管理 包括: APP的创建、修改、删除、校验,重置密钥,查看APP详情、查询APP列表。 APP Code的创建、自动生成、删除,查看APP Code详情、查询APP Code列表。 查询凭据关联的凭据配额。 设置/删除APP的访问控制,查看APP的访问控制详情。 凭据配额管理 包括: 凭据配额的创建、修改、删除。 获取凭据配额详情和凭据配额列表。 凭据配额绑定/解绑凭据列表 。 查询凭据配额已绑定的凭据和未绑定的凭据。 异步任务管理 包括: API的异步导入/导出。 获取异步任务结果。 父主题: API概览
  • 响应示例 状态码: 200 OK { "total" : 1, "size" : 1, "ingress_port_infos" : [ { "protocol" : "HTTP", "ingress_port" : 8080, "ingress_port_id" : "0ae98839d78043d8a6dff54d7cb096dc", "status" : "normal" } ] } 状态码: 401 Unauthorized { "error_code" : "APIC.7102", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIC.7106", "error_msg" : "No permissions to request for the method" } 状态码: 500 Internal Server Error { "error_code" : "APIC.9000", "error_msg" : "Failed to request internal service" }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 size Integer 本次返回的列表长度 total Long 满足条件的记录数 ingress_port_infos Array of IngressPortInfo objects 实例自定义入方向端口列表。 表5 IngressPortInfo 参数 参数类型 描述 protocol String 实例自定义入方向端口协议。 HTTP:实例自定义入方向端口使用HTTP协议。 HTTPS:实例自定义入方向端口使用HTTPS协议。 枚举值: HTTP HTTPS ingress_port Integer 实例自定义入方向端口,支持的端口范围为1024~49151。 最小值:1024 最大值:49151 ingress_port_id String 实例自定义入方向端口ID。 最小长度:32 最大长度:36 status String 实例自定义入方向端口的有效状态。 normal:实例自定义入方向端口状态正常。 abnormal:实例自定义入方向端口状态异常,无法使用。 枚举值: normal abnormal 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • URI GET /v2/{project_id}/apigw/instances/{instance_id}/custom-ingress-ports 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 表2 Query参数 参数 是否必选 参数类型 描述 offset 否 Long 偏移量,表示从此偏移量开始查询,偏移量小于0时,自动转换为0 缺省值:0 limit 否 Integer 每页显示的条目数量,条目数量小于等于0时,自动转换为20,条目数量大于500时,自动转换为500 最小值:1 最大值:500 缺省值:20 protocol 否 String 入方向端口的请求协议。 HTTP: 入方向端口为HTTP协议。 HTTPS: 入方向端口为HTTPS协议。 枚举值: HTTP HTTPS ingress_port 否 Integer 入方向端口的端口号,支持的端口范围为1024~49151。 最小值:1024 最大值:49151
  • URI DELETE /v2/{project_id}/apigw/instances/{instance_id}/custom-ingress-ports/{ingress_port_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 ingress_port_id 是 String 实例自定义入方向端口ID。
  • 响应参数 状态码: 400 表3 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述