Bu blogda, Apple Push Notification Sunucularına kimliği doğrulanmış HTTP/2 istekleri göndermek için sgcWebSockets JWT İstemcisinin nasıl yapılandırılacağını göstereceğim.
Durumsuz kimlik doğrulama Tokenları kullanarak Apple Push Notification service (APNs) ile iletişiminizi güvence altına alın.
Önce Apple Developer Hesabınızdan bir Şifreleme Anahtarı ve bir Key ID edinmelisiniz. Başarılı bir kayıttan sonra, Key ID ile 10 karakterlik bir dize ve .p8 dosya uzantısı olarak bir Kimlik Doğrulama Tokenı imzalama anahtarı edineceksiniz.
Algoritma olarak ES256 kullanarak bir JWT oluşturmak için sgcWebSockets JWT İstemcisini kullanmalısınız. Token her HTTP/2 isteği için oluşturulmamalı, token 20 dakikadan önce ve 60 dakikadan sonra yenilenmemelidir.
JWT İstemcisini Yapılandırma
JWT İstemcisini aşağıdaki değerlerle yapılandırın:
- JWTOptions.Header.Algorithm: tokenı şifrelemek için kullandığınız şifreleme algoritmasıdır. APNs yalnızca ES256 algoritmasını destekler.
- JWTOptions.Header.kid: geliştirici hesabınızdan edinilen 10 karakterlik Key ID'dir.
- JWTOptions.Payload.iss: şirketinizin uygulamalarını geliştirmek için kullandığınız 10 karakterlik Team ID'nin değeridir. Bu değeri geliştirici hesabınızdan edinin.
- JWTOptions.Payload.iat: Değeri bu JSON tokenının oluşturulduğu zamanı gösteren "verilme" zamanıdır. Değeri UTC olarak Epoch'tan bu yana geçen saniye sayısı olarak belirtin. Değer, geçerli zamandan en fazla bir saat olmalıdır.
- JWTOptions.RefreshTokenAfter: değeri saniye cinsinden 40 dakikaya (60*40) ayarlayın.
Token Tabanlı bağlantıların kullanılması, apns-topic'in uygulamanızın paket kimliği/uygulama kimliği değeriyle (örnek: com.example.application) gönderilmesini gerektirir.
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');
