IOS客户端到底怎么生成Token啊,搞了一整天了

别说什么在服务器生成比较安全什么的了,个人只是开发个简单的app,没有也不需要后端服务器啊!还有我是问OC的,管理员给我回答java的怎么实现,我晕

阅读 12.4k
7 个回答

千万注意安全,ipa文件一旦被反编译。。。希望你能保护好他,保护好你的ak和sk。(我不是管理员额,不要吐槽我)

@implementation QiniuAuthPolicy

@synthesize scope;
@synthesize callbackUrl;
@synthesize callbackBodyType;
@synthesize customer;
@synthesize expires;
@synthesize escape;

// Make a token string conform to the UpToken spec.

- (NSString *)makeToken:(NSString *)accessKey secretKey:(NSString *)secretKey
{
    const char *secretKeyStr = [secretKey UTF8String];

    NSString *policy = [self marshal];

    NSData *policyData = [policy dataUsingEncoding:NSUTF8StringEncoding];

    NSString *encodedPolicy = [GTMBase64 stringByWebSafeEncodingData:policyData padded:TRUE];
    const char *encodedPolicyStr = [encodedPolicy cStringUsingEncoding:NSUTF8StringEncoding];

    char digestStr[CC_SHA1_DIGEST_LENGTH];
    bzero(digestStr, 0);

    CCHmac(kCCHmacAlgSHA1, secretKeyStr, strlen(secretKeyStr), encodedPolicyStr, strlen(encodedPolicyStr), digestStr);

    NSString *encodedDigest = [GTMBase64 stringByWebSafeEncodingBytes:digestStr length:CC_SHA1_DIGEST_LENGTH padded:TRUE];

    NSString *token = [NSString stringWithFormat:@"%@:%@:%@",  accessKey, encodedDigest, encodedPolicy];

    return token;
}

// Marshal as JSON format string.

- (NSString *)marshal
{
    time_t deadline;
    time(&deadline);

    deadline += (self.expires > 0) ? self.expires : 3600; // 1 hour by default.
    NSNumber *deadlineNumber = [NSNumber numberWithLongLong:deadline];

    NSMutableDictionary *dic = [NSMutableDictionary dictionary];

    if (self.scope) {
        [dic setObject:self.scope forKey:@"scope"];
    }
    if (self.callbackUrl) {
        [dic setObject:self.callbackUrl forKey:@"callbackUrl"];
    }
    if (self.callbackBodyType) {
        [dic setObject:self.callbackBodyType forKey:@"callbackBodyType"];
    }
    if (self.customer) {
        [dic setObject:self.customer forKey:@"customer"];
    }

    [dic setObject:deadlineNumber forKey:@"deadline"];

    if (self.escape) {
        NSNumber *escapeNumber = [NSNumber numberWithLongLong:escape];
        [dic setObject:escapeNumber forKey:@"escape"];
    }

    NSString *json = [dic JSONString];

    return json;
}

@end
新手上路,请多包涵

唉,不说了,搞了一天半,我还是不理解。楼主帮个忙吧

新手上路,请多包涵

楼主这个问题解决了么?

新手上路,请多包涵

麻痹的 操七牛奶奶的 到底怎么搞

新手上路,请多包涵

{"error":"invalid put policy encoding"} 干,这是怎么解决。。。。。

新手上路,请多包涵

@高唱大江东去 那段生成的token显示无效啊,我上传文件用那个token就返回无效的token...

http://jsfiddle.net/gh/get/ex...

看它官网的文档啊,一路看过去,最后发现这个网站可以生成token. 郁闷的是360浏览器打不开,我用chrome打开了.

话说他官方文档写的真心不好.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进