In diesem Blogbeitrag zeige ich dir, wie du den sgcWebSockets- JWT-Client konfigurierst, um authentifizierte HTTP/2-Anfragen an Apple-Push-Notification-Server zu senden.
Sichere deine Kommunikation mit dem Apple Push Notification service (APNs) über zustandslose Authentifizierungs-Tokens.
Zuerst musst du einen Encryption Key und eine Key ID aus deinem Apple Developer Account beschaffen. Nach erfolgreicher Registrierung erhältst du einen 10-stelligen String mit der Key ID und einen Signing Key für den Authentifizierungs-Token als .p8-Datei.
Du musst den sgcWebSockets-JWT-Client verwenden, um einen JWT mit ES256 als Algorithmus zu generieren. Das Token darf nicht für jede HTTP/2-Anfrage generiert werden; es darf nicht früher als nach 20 Minuten und nicht später als nach 60 Minuten erneuert werden.
JWT-Client konfigurieren
Konfiguriere den JWT-Client mit folgenden Werten:
- JWTOptions.Header.Algorithm: der Verschlüsselungsalgorithmus, mit dem du das Token verschlüsselt hast. APNs unterstützt nur den ES256-Algorithmus.
- JWTOptions.Header.kid: die 10-stellige Key ID aus deinem Developer Account.
- JWTOptions.Payload.iss: der Wert, der die 10-stellige Team-ID ist, die du für die Entwicklung der Apps deines Unternehmens verwendest. Diesen Wert findest du in deinem Developer Account.
- JWTOptions.Payload.iat: der "issued at"-Zeitpunkt, dessen Wert anzeigt, wann dieses JSON-Token generiert wurde. Gib den Wert als Anzahl der Sekunden seit Epoch in UTC an. Der Wert darf nicht mehr als eine Stunde vor der aktuellen Zeit liegen.
- JWTOptions.RefreshTokenAfter: setze den Wert in Sekunden auf 40 Minuten (60*40).
Token-basierte Verbindungen erfordern das Senden des apns-topic mit dem Wert der Bundle-ID/App-ID deiner App (Beispiel: 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');
