[英]Facebook Signed Request for iOS (HMAC SHA256)
我一直在努力为iOS上的Facebook签名请求生成HMAC SHA256几周。 我迫切需要帮助。
Facebook签署的请求有两个部分,由一个句点分隔。 第一部分是有效载荷的HMAC256,而第二部分是有效载荷的Base64编码串。 我只能重新创建第二部分。
.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0
我一直在使用以下代码,每个人都使用它,但它生成一个不同的哈希:
#import <CommonCrypto/CommonHMAC.h>
#import "NSData+Base64.h"
+(NSString*) hmacForSecret:(NSString*)secret data:(NSString*)data {
const char *cKey = [secret cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
return [HMAC base64EncodedString];
}
根据Facebook文档: https : //developers.facebook.com/docs/authentication/signed_request/
当使用“ secret ”作为密钥时,应该正确输入HMAC256:
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso
要编码的有效负载:
{
"algorithm": "HMAC-SHA256",
"0": "payload"
}
注意:您可以Base64解码签名请求的第二部分以获取此有效负载。
问题出在Base64编码器上。 它需要编码为Base64Url,请参阅: http : //en.wikipedia.org/wiki/Base64#URL_applications
这是修改后的base64EncodedString类别方法:
//NSData+Base64.h
- (NSString *)base64EncodedString
{
size_t outputLength;
char *outputBuffer = NewBase64Encode([self bytes], [self length], true, &outputLength);
NSString *result = [[[NSString alloc] initWithBytes:outputBuffer length:outputLength encoding:NSASCIIStringEncoding] autorelease];
free(outputBuffer);
NSString *b64PayloadClean = [[result componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@""];
//do URL encoding by replacing "+" and "/" to "-" and "_" respectively
b64PayloadClean = [b64PayloadClean stringByReplacingOccurrencesOfString:@"=" withString:@""];
b64PayloadClean = [b64PayloadClean stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
b64PayloadClean = [b64PayloadClean stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
return b64PayloadClean;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.