美文网首页iOS Developer程序员
七牛图床token自动生成 - iOS

七牛图床token自动生成 - iOS

作者: ice_backy | 来源:发表于2016-06-25 07:46 被阅读1276次

手头项目用到了七牛图床, 上传会用到upload token. 七牛推荐我们从服务端获取token, 没给出在客户端生成的代码.
这平台文档写的相当蛋疼, 看了好久都没看出来upload token到底怎么生成.

Github在最后, 不想看完的朋友直接跳到最下去取~

大体步骤


参考七牛上传凭证在线生成

  1. 确定上传策略
  2. 将上传策略序列化成为json格式:
  3. 对json序列化后的上传策略进行URL安全的Base64编码,得到如下encoded:
  4. 用SecretKey对编码后的上传策略进行HMAC-SHA1加密,并且做URL安全的Base64编码,得到如下的encoded_signed:
  5. 将 AccessKey、encode_signed 和 encoded 用 “:” 连接起来,得到如下的UploadToken:

坑: 在线凭证生成会抽风, 有时候给出的结果是用AccessKey作为Key来HMAC-SHA1加密的结果, 所以如果你在与在线生成的步骤对照的时候发现错误不要方, 先运行看看会不会bad tokenError Domain=qiniu.com Code=401 "(null)" UserInfo={error=bad token}>

功能代码


/** 生成七牛UploadToken, 需要自己设置token有效时间 */
+ (NSString *)createTokenWithScope:(NSString *)scope accessKey:(NSString *)accessKey secretKey:(NSString *)secretKey liveTime:(NSInteger)deadline {
    // 1.确定上传策略
    NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
    jsonDict[@"scope"] = scope;
    jsonDict[@"deadline"] = @(deadline);
    
    // 2.将上传策略序列化成为json格式:
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict
                                                       options:0
                                                         error:nil];
    
    // 3.对json序列化后的上传策略进行URL安全的Base64编码,得到如下encoded:
    NSString* encoded = [self URLSafeBase64Encode:jsonData];
    
    // 4.用SecretKey对编码后的上传策略进行HMAC-SHA1加密,并且做URL安全的Base64编码,得到如下的encoded_signed:
    NSString *encoded_signed = [self HMACSHA1:secretKey text:encoded];
    
    // 5.将 AccessKey、encode_signed 和 encoded 用 “:” 连接起来,得到如下的UploadToken:
    NSString *uploadToken=[NSString stringWithFormat:@"%@:%@:%@",accessKey,encoded_signed,encoded];
    
    return uploadToken;
}

编码及加密代码


URL安全的Base64编码

#import "QN_GTM_Base64.h" // 需先导入该文件, 七牛SDK已包含

+ (NSString *)URLSafeBase64Encode:(NSData *)text {
    
    NSString *base64 = [[NSString alloc] initWithData:[QN_GTM_Base64 encodeData:text] encoding:NSUTF8StringEncoding];
    base64 = [base64 stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
    base64 = [base64 stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
    return base64;
}

HMAC-SHA1加密,并且做URL安全的Base64编码

#import <CommonCrypto/CommonHMAC.h> // 需先导入该文件

+  (NSString *)HMACSHA1:(NSString *)key text:(NSString *)text {
    const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [text cStringUsingEncoding:NSUTF8StringEncoding];
    char cHMAC[CC_SHA1_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:CC_SHA1_DIGEST_LENGTH];
    NSString *hash = [self URLSafeBase64Encode:HMAC];
    return hash;
}

Github

相关文章

  • 七牛图床token自动生成 - iOS

    手头项目用到了七牛图床, 上传会用到upload token. 七牛推荐我们从服务端获取token, 没给出在客户...

  • 客户端生成七牛上传token

    原文地址:客户端生成七牛上传token 在使用七牛iOS SDK上传图片时需要用到上传的token,虽然七牛建议t...

  • 图床——基于七牛JS-SDK和KVDB

    原文链接:图床——基于七牛JS-SDK和KVDB 上传 服务端获取token JS上传到七牛 详细使用可参考七牛J...

  • 前端如何上传图片到七牛云

    前端如何上传图片到七牛云 流程: 生成token => token和图片作为new FromData() 参数 再...

  • 如何自动备份图片到七牛图床?

    原文链接:如何自动备份图片到七牛图床? 七牛云是个很好用的图床,但是 Mac 下并没有什么很好用的客户端,每次上传...

  • 四探-七牛私有空间下载

    初探-七牛云存储二探-七牛Token生成三探-七牛断点续传 在应用中经常担心安全不高,万一被人抓包怎么办?为了安全...

  • 二探-七牛Token生成

    前面部分我们简单介绍了七牛云存储,在上传中对于客户端其中一个麻烦的就是Token Token是七牛中上传文件最重要...

  • Typora + PicGo

    必备 Markdown 编辑器:Typora 图床:七牛云 图床管理工具:PicGo 步骤 设置图床 教程 设置...

  • 七牛视频切片方案

    使用七牛 sdk 上传视频并做分片操作。 step1 生成 token 生成不同作用的凭证可以查看官方提供的示例n...

  • 七牛博客图床

    为啥要用图床 大家平时写文章肯定会使用markdown,而图片插入往往是一个大问题。我使用过jekyll和hexo...

网友评论

    本文标题:七牛图床token自动生成 - iOS

    本文链接:https://www.haomeiwen.com/subject/vmqadttx.html