HTTP Authorization

HTTP Authorization 授权流程

在项目中往往需要对访问的请求进行安全认证, 只有认证通过的请求,才能进行相关的操作。
开发者需要颁发 AccessKey 和 SecretKey 给用户 ,用户如果认证授权,将无法调用任何接口。
AccessKey: 用于标识客户身份,在网络请求中会以某种形式传输
SecretKey : 作为私钥形式存储于客户方本地, 不在网络传递,它的作用是对客户方发起的请求进行数字签名,保证该请求是来自指定客户的请求,并且是合法的有效的,
使用 ACCESS_KEY 进行身份识别,加上 SECRET_KEY 进行数字签名,即可完成应用接入与认证授权.

签名格式

Authorization = “Scheme ” + “ ” + AccessKey :Signature;
Signature = Base64(HMAC-SHA1(SecretKey , UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
               Content-MD5 + "\n" +
               Content-Type + "\n" +
               Date + "\n" +
               URI;

HTTP-Verb 表示请求的方法,如:GET\PUT\POST\DELETE等
Content-MD5 表示请求内容数据的MD5值, 使用Base64编码。当请求的header中包含Content-MD5时,需要在StringToSign中包含,否则用("")替代。
注意:Content-MD5的算法为先对数据做MD5摘要,再将MD5摘要做Base64编码。
Content-Type 表示请求内容的类型.
Date 表示此次操作的时间,且必须为 HTTP1.1 中支持的 GMT 格式。
URI表示用户访问的资源.

Authorization 校验流程

  1. 获取本地access_key以及secret_key;
  2. 获取请求头认证信息Authorization;
  3. 根据颁发给开发用户的 secret_key 计算 Signature, 使用 Base64 和 HMAC-SHA1算法
    signature = Base64(HMAC-SHA1(SecretKey , UTF-8-Encoding-Of( StringToSign ) ) );
    注意:HMAC-SHA1 计算出来的散列值转换成字符串,并且转换成全大写字母,再计算Base64,否则计算不一致;
  4. 将上述信息组装成如下格式 : AccessKey=MACCESSKEYA&Signature=B1JnLMAN%5FBKSKL32FW4IAsklsfb%4kajlfuiJFJH ;
  5. 若Authorization与4一致,则通过认证。

你可能感兴趣的:(网络)