本文将介绍如何配置 sgcWebSockets JWT 客户端,向 Apple 推送通知服务器发送经过身份验证的 HTTP/2 请求。
使用无状态身份验证 Token 保护与 Apple 推送通知服务(APNs)的通信安全。
首先您需要从 Apple 开发者账户获取加密密钥和密钥 ID。注册成功后,您将获得一个 10 位字符的密钥 ID 以及 .p8 扩展名的身份验证 Token 签名密钥。
您必须使用 sgcWebSockets JWT 客户端 以 ES256 算法生成 JWT。不应为每个 HTTP/2 请求生成新 token,token 的刷新不得早于 20 分钟,也不得晚于 60 分钟。
配置 JWT 客户端
请使用以下值配置 JWT 客户端:
- JWTOptions.Header.Algorithm:用于加密 token 的加密算法。APNs 仅支持 ES256 算法。
- JWTOptions.Header.kid:从开发者账户获取的 10 位字符密钥 ID。
- JWTOptions.Payload.iss:值为您用于开发公司应用程序的 10 位字符团队 ID,可从开发者账户获取。
- JWTOptions.Payload.iat:"签发时间",其值表示此 JSON token 的生成时间。以 UTC 时间自 Epoch 以来的秒数指定,该值必须距当前时间不超过一小时。
- JWTOptions.RefreshTokenAfter:将值设置为 40 分钟(60*40)秒。
使用基于 Token 的连接时,需要发送 apns-topic,其值为应用的 bundle ID/app ID(示例: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');
