In deze blog laat ik zien hoe je de sgcWebSockets JWT-client configureert om geauthenticeerde HTTP/2-requests naar Apple Push Notification-servers te versturen.
Beveilig je communicatie met de Apple Push Notification-service (APNs) met behulp van stateless authentication-tokens.
Eerst moet je een Encryption Key en een Key ID verkrijgen via je Apple Developer-account. Na succesvolle registratie ontvang je een 10-tekens lange string met de Key ID en een Authenticatie Token signing key met de bestandsextensie .p8.
Je moet de sgcWebSockets JWT-client gebruiken om een JWT te genereren met ES256 als algoritme. Het token moet niet voor elke HTTP/2-request worden gegenereerd; het mag niet eerder dan 20 minuten en niet later dan 60 minuten worden vernieuwd.
JWT-client configureren
Configureer de JWT-client met de volgende waarden:
- JWTOptions.Header.Algorithm: dit is het encryptie-algoritme dat je hebt gebruikt om het token te versleutelen. APNs ondersteunt alleen het ES256-algoritme.
- JWTOptions.Header.kid: dit is de 10-tekens lange Key ID die je via je developer-account hebt verkregen.
- JWTOptions.Payload.iss: de waarde hiervan is de 10-tekens lange Team ID die je gebruikt voor het ontwikkelen van de apps van je bedrijf. Deze waarde haal je op via je developer-account.
- JWTOptions.Payload.iat: de "issued at"-tijd; de waarde geeft het tijdstip aan waarop dit JSON-token is gegenereerd. Geef de waarde op als het aantal seconden sinds Epoch, in UTC. De waarde mag niet meer dan één uur van de huidige tijd verschillen.
- JWTOptions.RefreshTokenAfter: stel de waarde in seconden in op 40 minuten (60*40).
Bij gebruik van tokengebaseerde verbindingen moet je de apns-topic meesturen met de waarde van het bundle-id/app-id van je app (voorbeeld: 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');
