W tym wpisie pokazuję, jak skonfigurować klienta JWT sgcWebSockets do wysyłania uwierzytelnionych żądań HTTP/2 do serwerów Apple Push Notification.
Zabezpiecz komunikację z usługą Apple Push Notification (APNs), używając bezstanowych tokenów uwierzytelniających.
Najpierw musisz uzyskać Encryption Key i Key ID z konta Apple Developer. Po pomyślnej rejestracji otrzymasz 10-znakowy łańcuch z Key ID oraz klucz do podpisywania tokenów uwierzytelniających w pliku z rozszerzeniem .p8.
Do wygenerowania JWT z algorytmem ES256 użyj klienta JWT sgcWebSockets. Tokenu nie należy generować przy każdym żądaniu HTTP/2 — nie powinien być odświeżany wcześniej niż po 20 minutach ani później niż po 60 minutach.
Konfiguracja klienta JWT
Skonfiguruj klienta JWT następującymi wartościami:
- JWTOptions.Header.Algorithm: algorytm szyfrowania użyty do zaszyfrowania tokenu. APNs obsługuje wyłącznie algorytm ES256.
- JWTOptions.Header.kid: 10-znakowy Key ID uzyskany z konta deweloperskiego.
- JWTOptions.Payload.iss: 10-znakowy Team ID, którego używasz przy tworzeniu aplikacji firmy. Wartość tę uzyskasz z konta deweloperskiego.
- JWTOptions.Payload.iat: czas "issued at" wskazujący moment wygenerowania tokenu JSON. Podaj wartość jako liczbę sekund od epoki, w UTC. Wartość nie może być starsza niż jedna godzina od bieżącego czasu.
- JWTOptions.RefreshTokenAfter: ustaw wartość w sekundach odpowiadającą 40 minutom (60*40).
Przy połączeniach opartych na tokenach musisz wysyłać nagłówek apns-topic z wartością bundle ID/app id twojej aplikacji (np. 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');
