AK/SK
APIPark
提供了AK/SK(Access Key/Secret Key)鉴权机制,旨在为API调用提供安全的身份验证和权限控制。
什么是AK/SK鉴权?
AK/SK鉴权是基于一对密钥(即访问密钥和秘密密钥)对用户进行身份验证的一种安全机制。通过这种机制,平台可以确保只有经过授权的用户才能访问特定的API和资源。
- AK(Access Key):访问密钥,用于唯一标识调用者的身份。
- SK(Secret Key):秘密密钥,与访问密钥配对使用,用于对请求进行签名和验证。
优势
- 调用API时,用户需要使用SK对请求进行签名,以确保请求的完整性和真实性。
- 服务器接收到请求后,会使用相同的SK对请求进行验证,确认请求未被篡改并且来自合法用户。
操作演示
- 配置鉴权时,鉴权类型选
AkSk
,填写鉴权信息:
配置说明
字段名称 | 说明 |
---|---|
参数位置 | 鉴权校验放置在请求的位置,支持Header、Query、Body |
参数名称 | 参数名称 |
AK | Access Key |
SK | Access Secret Key |
过期时间 | 用户过期时间,当不填则永不过期,过期时间精确到天 |
隐藏鉴权信息 | 转发给上游服务时,是否隐藏用户信息 |
AK/SK流程概述
客户端涉及的AK/SK签名以及请求发送的流程概述如下:
- 构造规范请求。将待发送的请求内容按照与API网关后台约定的规则组装,确保客户端签名、API网关后台认证时使用的请求内容一致。
- 使用规范请求和其他信息创建待签字符串。
- 使用AK/SK和待签字符串计算签名。
- 将生成的签名信息作为请求消息头添加到HTTP请求中,或者作为查询字符串参数添加到HTTP请求中。
使用说明
一、构造规范请求
使用AK/SK方式进行签名与认证,首先需要规范请求内容,然后再进行签名。客户端与API网关使用相同的请求规范,可以确保同一个HTTP请求的前后端得到相同的签名结果,从而完成身份校验。
HTTP请求规范伪代码如下:
CanonicalRequest =
HTTPRequestMethod + '\n' +
CanonicalURI + '\n' +
CanonicalQueryString + '\n' +
CanonicalHeaders + '\n' +
SignedHeaders + '\n' +
HexEncode(Hash(RequestPayload))
假设 原始请求 如下:
GET http://www.demo.com/demo/login?parm1=value1&parm2= HTTP/1.1
Host: www.demo.com
X-Gateway-Date: 20200605T104456Z
1、HTTPRequestMethod:构造HTTP请求方法,以换行符结束。
HTTP请求方法,如GET、PUT、POST等。
构造示例:
GET
2、CanonicalURI:添加规范URI参数,以换行符结束。
- 规范URI,即请求资源路径,是URI的绝对路径部分的URI编码。
- 根据RFC 3986标准化URI路径,移除冗余和相对路径部分,路径中每个部分必须为URI编码。如果URI路径不以“/”结尾,则在尾部添加“/”。
注意:
计算签名时,URI必须以“/”结尾。发送请求时,可以不以“/”结尾。
构造示例:
GET
/demo/login/
3、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开头的参数名之前。
-
以排序后的第一个参数名开始,构造规范查询字符串。