In questo articolo mostrerò come configurare il client JWT di sgcWebSockets per inviare richieste HTTP/2 autenticate ai server Apple Push Notification.
Proteggi le tue comunicazioni con il servizio Apple Push Notification (APNs) usando token di autenticazione stateless.
Per prima cosa devi ottenere una Encryption Key e un Key ID dal tuo Apple Developer Account. Dopo una registrazione andata a buon fine otterrai una stringa di 10 caratteri con il Key ID e una chiave di firma del token di autenticazione come file con estensione .p8.
Devi usare il client JWT di sgcWebSockets per generare un JWT usando ES256 come algoritmo. Il token non deve essere generato per ogni richiesta HTTP/2: non deve essere aggiornato prima di 20 minuti né dopo 60 minuti.
Configurare il client JWT
Configura il client JWT con i seguenti valori:
- JWTOptions.Header.Algorithm: è l'algoritmo di cifratura usato per cifrare il token. APNs supporta solo l'algoritmo ES256.
- JWTOptions.Header.kid: è il Key ID di 10 caratteri ottenuto dal tuo developer account.
- JWTOptions.Payload.iss: il valore è il Team ID di 10 caratteri che usi per sviluppare le app della tua azienda. Ottieni questo valore dal tuo developer account.
- JWTOptions.Payload.iat: il tempo "issued at", il cui valore indica il momento in cui questo token JSON è stato generato. Specifica il valore come numero di secondi dall'Epoch, in UTC. Il valore non deve discostarsi più di un'ora dall'orario corrente.
- JWTOptions.RefreshTokenAfter: imposta il valore in secondi a 40 minuti (60*40).
Le connessioni basate su token richiedono di inviare l'header apns-topic con il valore del bundle ID/app id della tua app (esempio: com.example.application).
oHTTP := TsgcHTTP2Client.Create(nil);
oHTTP.TLSOptions.IOHandler := iohOpenSSL;
oJWT := TsgcHTTP_JWT_Client.Create(nil);
oHTTP.Authentication.Token.JWT := oJWT;
oJWT.JWTOptions.Header.alg := jwtES256;
oJWT.JWTOptions.Header.kid := 'apple key id';
oJWT.JWTOptions.Payload.iss := 'issuer';
oJWT.JWTOptions.Payload.iat := StrToInt64(GetDateTimeUnix(Now, False));
oJWT.JWTOptions.Algorithms.ES.PrivateKey.LoadFromFile('AuthKey_**.p8');
oJWT.JWTOptions.RefreshTokenAfter := 60*40;
oHTTP.Request.CustomHeaders.Clear;
oHTTP.Request.CustomHeaders.Add('apns-topic: com.example.application');
