Facebook signierte Anfrage für iOS (HMAC SHA256)

Ich habe seit Wochen versucht, eine von HMAC SHA256 für Facebook signierte Anfrage auf iOS zu generieren. Ich brauche dringend Hilfe.

Facebook signierte Anfragen bestehen aus zwei Teilen, die durch einen Punkt getrennt sind. Der erste Teil ist ein HMAC256 der Nutzlast, während der zweite Teil eine Base64-codierte Zeichenfolge der Nutzlast ist. Ich konnte nur den zweiten Teil neu erstellen.

vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0

Ich habe den folgenden Code verwendet, den jeder verwendet, aber er generiert einen anderen Hash:

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

Laut Facebook-Dokumenten:https://developers.facebook.com/docs/authentication/signed_request/

Die korrekte HMAC256-Ausgabe sollte bei Verwendung von "Geheimnis"als Schlüssel:

 vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso

Die zu codierende Nutzlast:

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

HINWEIS: Sie können den zweiten Teil der signierten Anforderung mit Base64 dekodieren, um diese Nutzdaten abzurufen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage