
# 配置API的后端服务签名校验
签名密钥用于后端服务验证API网关的身份，在API网关请求后端服务时，保障后端服务的安全。
签名密钥由一对Key和Secret组成，签名密钥需要绑定到API才能生效。当签名密钥绑定API后，API网关向后端服务发送此API的请求时，会增加相应的签名信息，此时需要后端服务依照同样方式进行签名，通过比对签名结果和API网关传过来的Authorization头中签名是否一致来校验API的合法性。
![](https://support.huaweicloud.com/usermanual-apig/zh-cn_image_0000002107833988.png "点击放大")
#### 约束与限制
- 同一个环境中一个API只能绑定一个签名密钥，一个签名密钥可以绑定多个API。
- 策略和API本身相互独立，只有为API绑定策略后，策略才对API生效。为API绑定策略时需指定发布环境，策略只对指定环境上的API生效。
- API的下线操作不影响策略的绑定关系，再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系，则策略无法执行删除操作。
 
#### 创建签名密钥策略
1. 进入[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)页面。
2. 根据实际业务在左侧导航栏上方选择实例。

3. 在左侧导航栏选择"API管理 \> API策略"。
4. 在"策略管理"页面，单击"创建策略"。
5. 在"选择策略类型"弹窗中选择"传统策略 \> 签名密钥"。
6. 在"创建策略"弹窗中，根据下表参数说明，配置策略信息。 
   表1签名密钥参数说明 
   | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | 密钥名称     | 自定义名称，用于识别不同的密钥。支持中文、英文、数字、下划线，且只能以英文或中文开头，长度为3\~64个字符。                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 类型       | 选择签名密钥的认证类型，可选择"HMAC"、"Basic Auth"、"AES"和"Public Key"。 在实例的[配置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0039.html)中开启"public_key_enable"功能后，才支持选择"Public Key"类型。                                                                                                                                                                                                                                                      |
   | 签名算法     | 选择AES的签名算法，包含以下两种： - aes-128-cfb  - aes-256-cfb                                                                                                                                                                                                                       |
   | Key      | 根据选择的密钥类型，填写不同的密钥信息。 - HMAC：填写APP认证所使用密钥对的Key。  - Basic Auth：填写basic认证所使用的用户名。  - AES：填写AES认证所使用的密钥key。  - Public Key：填写public_key认证所使用的公钥。   |
   | Secret   | 根据选择的密钥类型，填写不同的密钥信息。 - HMAC：填写APP认证所使用密钥对的Secret。  - Basic Auth：填写basic认证所使用的密码。  - AES：填写AES认证所使用的向量。  - Public Key：填写Public Key认证所使用的公钥。   |
   | 确认Secret | 填写与Secret一致的值。                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      
   
   
7. 单击"确定"。 
   在策略列表中显示已创建的签名密钥策略，表示策略创建成功。
   
   
8. 策略创建后，您还需要[为策略绑定API]，才能使策略对API生效。
   
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
   
 
 #### 为策略绑定API
1. 单击策略名称，进入策略详情。
2. 在API列表区域选择环境后，单击"绑定API"。
3. 筛选API分组以及发布环境，勾选所需的API。 
   支持通过API名称或标签筛选API，标签为创建API时定义的标签。
   
   
4. 单击"确定"，绑定完成。 
   - 如果单个API不需要绑定此策略，单击API所在行的"解绑"。
   
   - 如果批量API不需要绑定此策略，则勾选待解绑的API，单击列表上方"解绑"。最多同时解绑1000个API。
   
   
   
   
 
#### 验证签名结果
API网关将签名后的请求发送到后端服务，此时Authorization头中包含签名信息。后端服务通过不同的开发语言（例如Java、Go、Python、JavaScript、C#、PHP、C++、C等）进行签名，通过比对签名结果和API网关传过来的Authorization头中签名是否一致来校验API的合法性。
操作详情请参考[签名算法](https://support.huaweicloud.com/devg-apig/apig-dev-180307037.html#)对后端服务进行签名，比对签名结果和API网关传过来的Authorization头中签名是否一致来校验API的合法性。
#### 相关文档
如果您希望通过API创建签名密钥策略，请参考[创建签名密钥](https://support.huaweicloud.com/api-apig/CreateSignatureKeyV2.html)。
