简介
鉴权功能的位置处于基础服务的接入网关中。
1. 认证简介
本鉴权方案是在api层面上进行,通过使用Access Key/Secret Key加密的方法来对验证某个请求的调用者身份。
当接入网关接收到业务调用方的请求时,将使用相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。
2. 认证过程
业务云侧请求
note left of 业务云侧: 预置分配的AK/SK 业务云侧->业务云侧: 生成认证字符串 业务云侧->网关: 携带认证字符串的业务请求 网关->网关: 鉴权 网关-->业务云侧: 鉴权失败,返回401 网关->基础服务: 鉴权成功,透传请求
业务端侧请求
业务端侧->业务云侧: 获取携带认证字符串某个api的请求url note right of 业务云侧: 预置分配的AK/SK 业务云侧->业务云侧: 生成认证字符串 业务云侧->业务端侧: 返回携带认证字符串的url 业务端侧->网关: 使用业务云侧返回的url进行业务请求 网关->网关: 鉴权 网关-->业务云侧: 鉴权失败,返回401 网关->基础服务: 鉴权成功,透传请求
3. 认证字符串生成简介
3.1 概述
在生成认证字符串之前,首先需要生成Signature。为了生成Signature,用户需要首先构建CanonicalRequest并计算SigningKey。
注:
函数名 | 功能描述 |
---|---|
HMAC-SHA256-HEX() | 调用HMAC SHA256算法,根据开发者提供的密钥(key)和密文(message)输出密文摘要,并把结果转换为小写形式的十六进制字符串。 |
Lowercase() | 将字符串全部变成小写。 |
Trim() | 去掉字符串开头和结尾的空白字符。 |
UriEncode() | RFC 3986规定,"URI非保留字符"包括以下字符:字母(A-Z,a-z)、数字(0-9)、连字号(-)、 |