云服务器内容精选

  • 步骤2:创建待签字符串 对HTTP请求进行规范并取得请求的哈希值后,将其与签名算法、签名时间一起组成待签名字符串。 StringToSign = Algorithm + \n + RequestDateTime + \n + HashedCanonicalRequest 伪代码中参数说明如下。 Algorithm 签名算法。对于SHA 256,算法为SDK-HMAC-SHA256。 RequestDateTime 请求时间戳。与请求消息头X-Sdk-Date的值相同,格式为YYYYMMDDTHHMMSSZ。 HashedCanonicalRequest 经过哈希处理的规范请求。 上述例子得到的待签字符串为: SDK-HMAC-SHA256 20191111T093443Z af71c5a7ef45310b8dc05ab15f7da50189ffa81a95cc284379ebaa5eb61155c0
  • 步骤1:构造规范请求 使用APP方式进行签名与认证,首先需要规范请求内容,然后再进行签名。客户端与API网关使用相同的请求规范,可以确保同一个HTTP请求的前后端得到相同的签名结果,从而完成身份校验。 HTTP请求规范伪代码如下: CanonicalRequest = HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HexEncode(Hash(RequestPayload)) 通过以下示例来说明规范请求的构造步骤。 假设原始请求如下: GET https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?b=2&a=1 HTTP/1.1 Host: c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com X-Sdk-Date: 20191111T093443Z 构造HTTP请求方法(HTTPRequestMethod),以换行符结束。 HTTP请求方法,如GET、PUT、POST等。请求方法示例: GET 添加规范URI参数(CanonicalURI),以换行符结束。 释义: 规范URI,即请求资源路径,是URI的绝对路径部分的URI编码。 格式: 根据RFC 3986标准化URI路径,移除冗余和相对路径部分,路径中每个部分必须为URI编码。如果URI路径不以“/”结尾,则在尾部添加“/”。 举例: 示例中的URI:/app1,此时规范的URI编码为: GET /app1/ 计算签名时,URI必须以“/”结尾。发送请求时,可以不以“/”结尾。 添加规范查询字符串(CanonicalQueryString),以换行符结束。 释义: 查询字符串,即查询参数。如果没有查询参数,则为空字符串,即规范后的请求为空行。 格式: 规范查询字符串需要满足以下要求: 根据以下规则对每个参数名和值进行URI编码: 请勿对RFC 3986定义的任何非预留字符进行URI编码,这些字符包括:A-Z、a-z、0-9、-、_、.和~。 使用%XY对所有非预留字符进行百分比编码,其中X和Y为十六进制字符(0-9和A-F)。例如,空格字符必须编码为%20,扩展UTF-8字符必须采用“%XY%ZA%BC”格式。 对于每个参数,追加“URI编码的参数名称=URI编码的参数值”。如果没有参数值,则以空字符串代替,但不能省略“=”。 例如以下含有两个参数,其中第二个参数parm2的值为空。 parm1=value1&parm2= 按照字符代码以升序顺序对参数名进行排序。例如,以大写字母F开头的参数名排在以小写字母b开头的参数名之前。 以排序后的第一个参数名开始,构造规范查询字符串。 举例: 示例中包含两个可选参数:a、b GET /app1/ a=1&b=2 添加规范消息头(CanonicalHeaders),以换行符结束。 释义: 规范消息头,即请求消息头列表。包括签名请求中的所有HTTP消息头列表。消息头必须包含X-Sdk-Date,用于校验签名时间,格式为ISO8601标准的UTC时间格式:YYYYMMDDTHHMMSSZ。如果API发布到非RELEASE环境时,需要增加自定义的环境名称。 客户端须注意本地时间与时钟服务器的同步,避免请求消息头X-Sdk-Date的值出现较大误差。 API网关除了校验时间格式外,还会校验该时间值与网关收到请求的时间差,如果时间差大于15分钟,API网关将拒绝请求。 格式: CanonicalHeaders由多个请求消息头共同组成,CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ...,其中每个请求消息头(CanonicalHeadersEntry)的格式为Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\n' Lowercase:表示将所有字符转换为小写字母的函数。 Trimall:表示删除值前后的多余空格的函数。 最后一个请求消息头也会携带一个换行符。叠加规范中CanonicalHeaders自身携带的换行符,因此会出现一个空行。 消息头名称要保持唯一性,出现多个相同消息头名称时,无法完成认证。 举例: GET /app1/ a=1&b=2 host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com x-sdk-date:20191111T093443Z 规范消息头需要满足以下要求: 将消息头名称转换为小写形式,并删除前导空格和尾随空格。 按照字符代码对消息头名称进行升序排序。 例如原始消息头为: Host: c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com\n Content-Type: application/json;charset=utf8\n My-header1: a b c \n X-Sdk-Date:20191111T093443Z\n My-Header2: "a b c" \n 规范消息头为: content-type:application/json;charset=utf8\n host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com\n my-header1:a b c\n my-header2:"a b c"\n x-sdk-date:20191111T093443Z\n 添加用于签名的消息头声明(SignedHeaders),以换行符结束。 释义: 用于签名的请求消息头列表。通过添加此消息头,向API网关告知请求中哪些消息头是签名过程的一部分,以及在验证请求时API网关可以忽略哪些消息头。X-Sdk-date必须作为已签名的消息头。 格式: SignedHeaders = Lowercase(HeaderName0) + ';' + Lowercase(HeaderName1) + ";" + ... 已签名的消息头需要满足以下要求:将已签名的消息头名称转换为小写形式,按照字符代码对消息头进行排序,并使用“;”来分隔多个消息头。 Lowercase表示将所有字符转换为小写字母。 举例: 以下表示有两个消息头参与签名:host、x-sdk-date GET /app1/ a=1&b=2 host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com x-sdk-date:20191111T093443Z host;x-sdk-date 基于HTTP或HTTPS请求正文中的body体(RequestPayload),使用SHA-256哈希函数创建哈希值。 释义: 请求消息体。消息体需要做两层转换:HexEncode(Hash(RequestPayload)),其中Hash表示生成消息摘要的函数,当前支持SHA-256算法。HexEncode表示以小写字母形式返回摘要的Base-16编码的函数。例如,HexEncode("m") 返回值为“6d”而不是“6D”。输入的每一个字节都表示为两个十六进制字符。 计算RequestPayload的哈希值时,对于“RequestPayload==null”的场景,直接使用空字符串""来计算。 举例: 本示例为GET方法,body体为空。经过哈希处理的body(空字符串)如下: GET /app1/ a=1&b=2 host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com x-sdk-date:20191111T093443Z host;x-sdk-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 对构造好的规范请求进行哈希处理,算法与对RequestPayload哈希处理的算法相同。经过哈希处理的规范请求必须以小写十六进制字符串形式表示。 算法伪代码:Lowercase(HexEncode(Hash.SHA256(CanonicalRequest))) 经过哈希处理的规范请求示例: af71c5a7ef45310b8dc05ab15f7da50189ffa81a95cc284379ebaa5eb61155c0
  • 步骤3:计算签名 将APP secret和创建的待签字符串作为加密哈希函数的输入,计算签名,将二进制值转换为十六进制表示形式。 伪代码如下: signature = HexEncode(HMAC(APP secret, string to sign)) 其中HMAC指密钥相关的哈希运算,HexEncode指转十六进制。伪代码中参数说明如表1所示。 表1 参数说明 参数名称 参数解释 APP secret 签名密钥 string to sign 创建的待签字符串 假设APP secret为FWTh***XMD8,则计算得到的signature为: 5ac0b7c4035112cd840397e12d10cd1ca065328d03a6242d5cbfbbd63659c011
  • 步骤4:添加签名信息到请求头 在计算签名后,将它添加到Authorization的HTTP消息头。Authorization消息头未包含在已签名消息头中,主要用于身份验证。 伪代码如下: Authorization header创建伪码: Authorization: algorithm Access=APP key, SignedHeaders=SignedHeaders, Signature=signature 需要注意的是算法与Access之前没有逗号,但是SignedHeaders与Signature之前需要使用逗号隔开。 得到的签名消息头为: Authorization: SDK-HMAC-SHA256 Access=FM9RLCN************NAXISK, SignedHeaders=host;x-sdk-date, Signature=01cc37e53d***e00b15822 得到签名消息头后,将其增加到原始HTTP请求内容中,请求将被发送给API网关,由API网关完成身份认证。身份认证通过后,该请求才会发送给后端服务进行业务处理。
  • 身份认证和访问控制 APIG提供API级别的认证鉴权,包括APP认证、 IAM 认证和自定义认证。 在IAM认证场景下,使用Token认证方式调用API时,token过期时间由IAM服务决定。详情请参考获取IAM用户Token(使用密码)。 在APP认证/IAM认证场景下,使用AK/SK认证方式调用API时,签名有效期为15分钟。 APIG提供API级别访问控制策略,用户可以设置IP地址或账户的黑白名单来禁止/允许某个IP地址/账号名/账号ID访问API。 APIG支持实例级别访问控制策略,用户可以配置黑白名单来禁止/允许某个IP地址访问实例。
  • DDoS防护 流量控制: APIG提供API级别的流量控制策略和流量控制2.0插件策略,用户可以通过为API配置流控策略进行流量控制。 APIG提供实例级别的流量控制,通过配置ratelimit_api_limits参数设置API全局默认流控值。 APIG提供实例级别的请求大小控制,通过配置request_body_size参数设置请求中允许携带的Body大小上限。 APIG支持对接WAF和DDoS防护服务来进行抵御攻击。具体操作请参考使用WAF对APIG进行安全防护和使用DDoS防护服务为APIG抵御DDoS攻击。
  • 到期后影响 下图描述了包年/包月实例各个阶段的状态。购买后,在计费周期内实例正常运行,此阶段为有效期;实例到期而未续费时,将陆续进入宽限期和保留期。 图2 包年/包月实例生命周期 到期预警 包年/包月实例在到期前第7天内,系统将向用户推送到期预警消息。预警消息将通过邮件、短信和站内信的方式通知到华为云账号的创建者。 到期后影响 当您的包年/包月实例到期未续费,首先会进入宽限期,实例状态变为“已过期”。宽限期内您可以正常访问实例。如果您在宽限期内仍未续费包年/包月实例,那么就会进入保留期,实例状态变为“已冻结”,您将无法对处于保留期的包年/包月实例执行任何操作。 保留期到期后,若包年/包月实例仍未续费,那么实例将被释放,数据无法恢复。 华为云根据客户等级定义了不同客户的宽限期和保留期时长。 关于续费的详细介绍请参见续费概述。
  • 共享版API网关 共享版API网关按调用量费用+公网流量费用计费,调用量指API调用次数,流量指API调用的下行网络流量。计费模式详情请参考表3。 共享版APIG已下线,当前仅存量用户可以使用。关于计费模式详情请参考价格详情,下文不再具体描述。 表3 共享版API网关计费模式 计费模式 按需计费 付费方式 后付费 按照实际使用量计费。 计费周期 按天结算。 账单出账时间通常在当前计费周期结束后一小时内,最长不超过三个小时。 适用计费项 使用量(包含API调用量和公网流量) 如果后端服务与API网关不在同一区域,或后端服务不在华为云,将会额外收取API网关到后端服务的流量费用。 适用场景 适用于API需求较小的场景。
  • 计费示例 以按需使用为例,假设您已开通API网关实例专业版且未使用公网带宽,该版本按需计费的实例版本单价为12.88元/小时/实例。您于2023/03/08 15:50:04在API网关上购买了1个实例,在2023/03/10 17:50:00使用完成后删除实例。费用计算如下: 费用计算结果保留小数点后两位,第三位四舍五入。如遇四舍五入后不足¥0.01,则按¥0.01展示。因此,费用为643.99元。
  • 计费说明 API网关提供包年/包月模式和按需模式,包年/包月模式计费项信息请参考表1,按需模式计费项信息请参考表2 表1 包年/包月模式计费项信息 计费项目 计费项说明 适用的计费模式 计费公式 版本 API网关提供的实例版本有:基础版、专业版、企业版、铂金版等,您可以根据实际业务需要按需使用。实例版本说明,请参考产品规格。如果您当前使用的实例版本不能满足需要,API网关支持升级产品版本,例如从“基础版”升级到“专业版”或者铂金版,并且对现有业务没有影响。 实例版本单价,请参考价格详情中的包年/包月计费价格。 包年/包月计费。 版本实例价格x购买个数+公网带宽单价x实际使用时长x实例个数 购买时长(月或年) 使用API网关实例的时间长度,支持使用1~9个月,或者1~3年。 购买个数(个) 使用API网关实例的个数。 公网带宽 API请求出公网带宽。 按需计费。 表2 按需模式计费项信息 计费项目 计费项说明 适用的计费模式 计费公式 版本 API网关提供的实例版本有:基础版、专业版、企业版、铂金版等,您可以根据实际业务需要按需使用。实例版本说明,请参考产品规格。如果您当前使用的实例版本不能满足需要,API网关支持升级产品版本,例如从“基础版”升级到“专业版”或者铂金版,并且对现有业务没有影响。 实例版本单价,请参考价格详情中的按需计费价格。 按需计费。 实例版本单价x使用时长x实例个数+公网带宽单价x使用时长x实例个数 公网带宽 API请求出公网带宽。 购买时长(小时) 使用API网关实例的时间长度,按小时计费,精确到秒。 购买个数(个) 使用API网关实例的个数。
  • API调用授权概述 API调用者在调用使用APP认证的API时,可以通过凭据进行API认证或AppCode进行简易的API认证。APP认证类型包含下表中列举的类型,更多详情请参考调用APIG开放的API。下文介绍凭据和AppCode的配置,您可以根据业务需求选择其中一种进行认证。 表1 APP认证类型 APP认证类型 认证方式 签名认证 通过凭据进行API认证。 简易认证 通过AppCode进行简易的API认证。 双重认证 通过凭据/AppCode和自定义认证进行API认证。 app_api_key认证 通过凭据进行API认证。 app_secret认证 通过凭据进行API认证。 app_basic认证 通过凭据进行API认证。 app_jwt认证 通过凭据进行API认证。 配置APIG的API认证凭据 在API网关中创建一个凭据,生成密钥对(Key、Secret),在调用API时,API网关服务根据密钥对进行身份核对,完成鉴权。Key唯一且不可重置,支持重置Secret。 配置APIG的API简易认证AppCode API配置简易认证模式后,在调用API时,API网关服务既可以根据AppCode进行简易认证,也可以根据密钥对进行鉴权。 父主题: 配置API调用授权(可选)
  • 绑定SSL证书(可选) 当API分组中的API支持HTTPS请求协议,则需要为独立 域名 绑定SSL证书。否则跳过此步骤。 在域名所在行单击“选择SSL证书”。 在选择SSL证书弹窗中勾选要绑定的SSL证书,然后单击“确定”,完成SSL证书的绑定。 如果选择的SSL证书上传过CA证书,可以勾选“开启客户端认证”即开启HTTPS双向认证。注意,开启/关闭客户端认证会对现有业务有影响,请谨慎操作。 如果证书列表中无可用的SSL证书,可单击“创建SSL证书”,新增SSL证书,具体操作配置请参考创建SSL证书。
  • 获取域名 申请域名。 云服务平台内业务系统访问API的场景,需获取内网域名作为独立域名。具体请参考创建内网域名。 云服务平台外业务系统访问API的场景,需获取公网域名作为独立域名。具体可通过 域名注册服务 申请。 备案公网域名,您可以通过备案中心完成域名备案。备案时长需几个工作日,建议您提前进行备案。 在域名上添加实例“虚拟私有云访问地址”的A类型记录集,具体请参考增加A类型记录集。 或者在域名上添加API分组“调试域名”的CNAME类型记录集,具体请参考增加CNAME类型记录集。 如果API分组中的API支持HTTPS请求协议,则需要为独立域名添加SSL证书。您需要提前获取SSL证书的内容和密钥,并创建SSL证书。
  • 约束与限制 调试域名默认只能在与实例相同VPC内的服务器上解析和访问,如果调试域名要支持公网解析与访问,请在实例上绑定公网入口弹性IP。 调试域名不能用于生产业务,且仅限应用程序调试使用。 同一实例下的不同分组不能绑定相同的独立域名。 独立域名绑定端口时,同一域名不支持绑定相同端口。 同一域名不同端口,无论哪个端口绑定/修改/解绑SSL证书、开启/关闭客户端认证,所有端口都会同步生效。 如果您通过负载通道访问后端服务,那么独立域名绑定的端口需与负载通道中后端服务器的访问端口保持一致。 独立域名绑定端口后,如果您通过IP地址访问非DEFAULT分组下的API,那么需要在请求消息中添加Header参数“host”,host值必须带有对应的访问协议的端口(默认的80/443端口,host值可以不带)。 如果您通过IP地址访问API,则无法使用域名证书完成SSL认证,除非配置了IP证书。因此,不推荐使用IP地址访问API,否则无法保证链路安全。 启用http to https自动重定向时,由于浏览器限制,非GET或非HEAD方法的重定向可能导致数据丢失,因此,API请求方法限定为GET或HEAD。仅当API的请求协议选择“HTTPS”或“HTTP&HTTPS”,且独立域名已绑定SSL证书时重定向生效。 *.aaa.com可以匹配default.aaa.com,1.aaa.com,1.2.aaa.com等类型的域名,但是如果申请的证书域名*.aaa.com,则证书只能用于default.aaa.com、1.aaa.com,不能用于1.2.aaa.com。
  • 调用API 本章节仅提供请求地址和认证参数的配置指导,客户端的其他参数配置需要用户自行调整,如超时配置、SSL配置等。如果客户端参数配置错误会导致业务受损,建议参考业界标准进行配置。 API调用支持长连接。但是需要适当使用长连接,避免占用太多资源。 构造API请求,示例如下: POST https://{Address}/{Path}?{Query} {Header} { {Body} } POST:请求方法,需替换为获取API的调用信息中获取的请求方法。 {Address}:请求地址,需替换为获取API的调用信息中获取的域名地址。 API调用场景 API请求参数配置 使用域名调用API 使用服务分配的调试域名或服务绑定的域名调用API,无需另外配置。 使用IP调用DEFAULT分组的API API允许使用IP地址调用DEFAULT分组下的API,无需另外配置。 使用IP调用非DEFAULT分组的API 使用IP地址直接调用非DEFAULT分组下的APP认证的API: 将实例的配置参数“app_route”和“app_secret”设置为“on”。开启“app_route”之后,同一凭据不能授权给相同请求路径和方法的API。 在请求消息中添加Header参数“X-HW-ID”和“X-HW-APPKEY”,参数值为API所授权凭据的Key和Secret。 须知: 使用简易认证(APP认证)调用API时,仅需在请求消息中添加Header参数“X-Apig-AppCode”和“host”即可。 使用IP地址直接调用非DEFAULT分组下的非APP认证的API,需要在请求消息中添加Header参数“host”。 {Path}:请求路径,需替换为获取API的调用信息中获取的请求路径。 {Query}:查询参数,可选,格式为“参数名=参数取值”,例如limit=10,多个查询参数之间使用“&”隔开。需根据获取API的调用信息中获取的请求参数进行设置。 {Header}:请求头参数,格式为“参数名: 参数取值”,例如Content-Type: application/json。需根据获取API的调用信息中获取的请求参数进行设置。 {Body}:请求消息体,JSON格式。需根据获取API的调用信息中获取的请求体内容描述进行设置。 为API请求添加认证信息。 API认证方式 API请求参数配置 APP认证(签名认证) 使用获取的SDK对API请求进行签名,具体请参考使用APP认证调用API。 APP认证(简易认证) 在API请求中添加Header参数“X-Apig-AppCode”,参数值为获取API的调用信息中获取到的AppCode。具体请参考快速入门。 APP认证(app_api_key认证) 实例的配置参数“app_api_key”已设置为“on”,开启app_api_key认证。 在API请求中添加Header或Query参数“apikey”,参数值为获取API的调用信息中获取到的Key。 APP认证(app_secret认证) 实例的配置参数“app_secret”已设置为“on”,开启app_secret认证,且“app_api_key”已设置为“off”,关闭app_api_key认证。 在API请求中添加Header参数“X-HW-ID”,参数值为获取API的调用信息中获取到的Key。 在API请求中添加Header参数“X-HW-AppKey”,参数值为获取API的调用信息中获取到的Secret。 APP认证(app_basic认证) 实例的配置参数“app_basic”已设置为“on”,开启app_basic认证。 在API请求中添加Header参数“Authorization”,参数值为"Basic"+base64(appkey+":"+appsecret),其中appkey和appsecret分别为获取API的调用信息中获取到的Key和Secret。 APP认证(app_jwt认证) 实例的配置参数“app_jwt”已设置为“on”,开启app_jwt认证。 在API请求中添加Header参数“Timestamp”,参数值为当前时间的Unix时间戳,单位为毫秒。 在API请求中添加Header参数“Authorization”,参数值为sha256(appkey+appsecret+timestamp),且sha256加密后的字符串需为小写字母。其中appkey和appsecret分别为获取API的调用信息中获取到的Key和Secret,timestamp为当前时间的Unix时间戳,单位为毫秒。 在API请求中添加Header参数“X-HW-ID”,参数值为获取API的调用信息中获取到的Key。 APP认证(双重认证) 在API请求中同时携带APP认证和自定义认证的认证信息。 IAM认证(Token认证) 先获取云服务平台的认证Token,然后在API请求中添加Header参数“X-Auth-Token”,参数值为认证Token,具体请参考Token认证。 IAM认证(AK/SK认证) 使用获取的SDK对API请求进行签名,具体请参考AK/SK认证。 IAM认证(双重认证) 在API请求中同时携带IAM认证和自定义认证的认证信息。 自定义认证 根据自定义认证的定义,在API请求参数中携带相关认证信息进行认证。 无认证 无需认证,可直接调用API。 第三方认证(API策略) 向API提供者获取请求参数中要携带的第三方认证信息。
提示

您即将访问非华为云网站,请注意账号财产安全