公有云API的认证方式
一般有以下几种认证方式:
Token认证
AK/SK认证
RSA非对称加密方式
Token认证
使用Token认证方式完成认证鉴权时,用户首先需要获取token,在调用接口时增加“X-XXX-Token”到业务接口请求消息头中。
流程
1. 发送请求,获取IAM的Endpoint及消息体中的区域名称。
2. 获取Token。请求响应成功后在响应消息头中包含的“X-YYY-Token”的值即为Token值。
3. 调用业务接口,在请求消息头中增加“X-XXX-Token”,取值为2中获取的Token。
原理:任何请求,都附带token;服务端根据token判断请求是否合法。
缺点:若是报文在中途被劫持,那么token就泄露了,这时(token有效期内)黑客就能够构造任意的请求了。
2 AK/SK认证
2.1 AK/SK 原理
云主机需要通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。
Access Key Id(AK)用于标示用户,Secret Access Key(SK)是用户用于加密认证字符串和云厂商用来验证认证字符串的密钥,其中SK必须保密。 AK/SK原理使用对称加解密。
2.2 AK/SK使用机制
云主机接收到用户的请求后,系统将使用AK对应的相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。
2.3 流程
判断用户请求中是否包含Authorization认证字符串。如果包含认证字符串,则执行下一步操作。
基于HTTP请求信息,使用相同的算法,生成Signature字符串。
使用服务器生成的Signature字符串与用户提供的字符串进行比对,如果内容不一致,则认为认证失败,拒绝该请求;如果内容一致,则表示认证成功,系统将按照用户的请求内容进行操作。
原理:
客户端:
1. 构建http请求(包含 access key);
2. 使用请求内容和 使用secret access key计算的签名(signature);
3. 发送请求到服务端。
服务端:
1. 根据发送的access key 查找数据库得到对应的secret-key;
2. 使用同样的算法将请求内容和 secret-key一起计算签名(signature),与客户端步骤2相同;
3. 对比用户发送的签名和服务端计算的签名,两者相同则认证通过,否则失败。