阿里OSS STS临时授权访问 C语言实现

使用curl和openssl实现阿里STS授权访问OSS

官方文档 https://help.aliyun.com/document_detail/100624.html?spm=a2c4g.11186623.6.622.50f27e0f66h6C2

阿里控制台 -> 访问控制 -> 用户管理 -> 新建用户 -> 创建AccessKey
将AccessKey ID, AccessKey Secret保存下来

由服务器创建STS令牌, 然后传给客户端, 客户端再调用阿里的STS文件上传接口.
STS信息中包含以下信息

String keyId;
String keySecret;
String securityToken;

由于设备开发人员死活编译不过阿里的C语言版OSS库, 因此本人使用libcurl编写了一个简单的上传接口

难点在于计算Authorization
https://help.aliyun.com/document_detail/31951.html?spm=a2c4g.11186623.2.13.61aa292dSKfAkT#concept-aml-vv2-xdb

//STS令牌中有AccessKeyId 
Authorization = "OSS " + AccessKeyId + ":" + Signature

Signature = base64(hmac-sha1(AccessKeySecret, //STS令牌中有AccessKeySecret 
            VERB + "\n"   //本例中就是Put
            + Content-MD5 + "\n"  //可以不填, 那就不填了, 但是换行符不能省, 依然要带上
            + Content-Type + "\n"  //写死application/octet-stream
            + Date + "\n"  //Http头中的Date字段的值, 形如Mon, 28 Jan 2019 11:18:53 GMT
            + CanonicalizedOSSHeaders  //形式为 x-oss-security-token:security-token, 其中security-token从STS令牌中读取 
            + CanonicalizedResource))  //形式为/bucketName/objectName

Signature 计算出来之后, 其它的就不是难事了. 代码参考
https://github.com/wzjwhut/alioss_with_curl/blob/master/c/src/alioss.c

猜你喜欢

转载自blog.csdn.net/wzj_whut/article/details/86681360