Podpisane żądanie Facebooka dla systemu iOS (HMAC SHA256)

Od tygodni próbuję wygenerować HMAC SHA256 dla podpisanego wniosku na Facebooku na iOS. Desperacko potrzebuję pomocy.

Podpisane żądania Facebooka mają dwie części oddzielone kropką. Pierwsza część to HMAC256 ładunku, podczas gdy druga część to łańcuch danych zakodowany w Base64. Udało mi się odtworzyć tylko drugą część.

vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0

Używam następującego kodu, którego wszyscy używają, ale generuje inny skrót:

#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];
}

Według dokumentów Facebooka:https://developers.facebook.com/docs/authentication/signed_request/

Prawidłowe wyjście HMAC256 powinno być przy użyciu „sekret„jako klucz:

 vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso

Ładunek do zakodowania:

 {
     "algorithm": "HMAC-SHA256",
     "0": "payload"
 }

UWAGA: Możesz odczytać Base64 drugą część podpisanego żądania, aby uzyskać ten ładunek.

questionAnswers(1)

yourAnswerToTheQuestion