Facebook подписал запрос на iOS (HMAC SHA256)
Я уже несколько недель пытаюсь сгенерировать подписанный запрос HMAC SHA256 для Facebook на iOS. Я отчаянно нуждаюсь в помощи.
Подписанные запросы Facebook состоят из двух частей, разделенных точкой. Первая часть - это HMAC256 полезной нагрузки, а вторая часть - строка полезной нагрузки в кодировке Base64. Я смог воссоздать только вторую часть.
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.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/
Правильный вывод HMAC256 должен быть при использовании & quot;secret& Quot; в качестве ключа:
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso
Полезная нагрузка для кодирования:
{
"algorithm": "HMAC-SHA256",
"0": "payload"
}
ПРИМЕЧАНИЕ. Вы можете Base64 декодировать 2-ю часть подписанного запроса, чтобы получить эту полезную нагрузку.