Dans cet article, je vais montrer comment configurer le client JWT de sgcWebSockets pour envoyer des requêtes HTTP/2 authentifiées aux serveurs Apple Push Notification.
Sécurise tes communications avec le service Apple Push Notification (APNs) en utilisant des jetons d'authentification sans état.
Tu dois d'abord obtenir une Encryption Key et un Key ID depuis ton Apple Developer Account. Après une inscription réussie, tu obtiendras une chaîne de 10 caractères avec le Key ID et une clé de signature de jeton d'authentification au format .p8.
Tu dois utiliser le client JWT de sgcWebSockets pour générer un JWT en utilisant ES256 comme algorithme. Le jeton ne doit pas être généré pour chaque requête HTTP/2 ; il ne doit pas être rafraîchi avant 20 minutes ni après 60 minutes.
Configurer le client JWT
Configure le client JWT avec les valeurs suivantes :
- JWTOptions.Header.Algorithm : algorithme de chiffrement utilisé pour chiffrer le jeton. APNs ne prend en charge que l'algorithme ES256.
- JWTOptions.Header.kid : Key ID de 10 caractères obtenu depuis ton developer account.
- JWTOptions.Payload.iss : valeur correspondant au Team ID de 10 caractères que tu utilises pour développer les applications de ton entreprise. Récupère cette valeur depuis ton developer account.
- JWTOptions.Payload.iat : le moment « issued at », dont la valeur indique l'instant où ce jeton JSON a été généré. Spécifie la valeur en nombre de secondes depuis Epoch, en UTC. La valeur ne doit pas être plus ancienne d'une heure par rapport à l'instant courant.
- JWTOptions.RefreshTokenAfter : définis la valeur en secondes à 40 minutes (60*40).
Les connexions basées sur jetons exigent d'envoyer l'en-tête apns-topic avec la valeur du bundle ID/app id de ton application (exemple : 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');
