2017-02-28 34 views
11

トークンベースの認証を使用して、iOSデバイスにプッシュ通知を送信しようとしています。C#でAPNs Auth Key(.p8ファイル)を使用するには?

必要に応じて、私はAppleのDev PortalでAPNs Auth Keyを生成し、ダウンロードしました(これはp8拡張子のファイルです)。

C#サーバーからプッシュ通知を送信するには、このp8ファイルを使用してJWTトークンに署名する必要があります。それ、どうやったら出来るの?

X509Certificate2にファイルをロードしようとしましたが、X509Certificate2がp8ファイルを受け付けていないようですので、ファイルをpfx/p12に変換しようとしましたが、実際に動作する方法を見つけることができませんでした。

答えて

4

私はBouncyCastleを使用して、それを行う方法を発見:

private static CngKey GetPrivateKey() 
{ 
    using (var reader = File.OpenText("path/to/apns/auth/key/file.p8")) 
    { 
     var ecPrivateKeyParameters = (ECPrivateKeyParameters)new PemReader(reader).ReadObject(); 
     var x = ecPrivateKeyParameters.Parameters.G.AffineXCoord.GetEncoded(); 
     var y = ecPrivateKeyParameters.Parameters.G.AffineYCoord.GetEncoded(); 
     var d = ecPrivateKeyParameters.D.ToByteArrayUnsigned(); 
     return EccKey.New(x, y, d); 
    } 
} 

そして今(jose-jwtを使用して)トークンを作成し、署名:

private static string GetProviderToken() 
{ 
    var epochNow = (int) DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; 
    var payload = new Dictionary<string, object>() 
    { 
     {"iss", "your team id"}, 
     {"iat", epochNow} 
    }; 
    var extraHeaders = new Dictionary<string, object>() 
    { 
     {"kid", "your key id"} 
    }; 
    var privateKey = GetPrivateKey(); 
    return JWT.Encode(payload, privateKey, JwsAlgorithm.ES256, extraHeaders); 
} 
+1

するあなたは、貴社のコードを共有することをいとわないだろうトークンとペイロードデータをアップロードするのに使用しますか?私は何時間も試してみましたが、 "Connection Closed"エラーしか出ません。 –

+0

こんにちは、このトークンでApple Webサービスを呼び出すにはどうすればいいですか? –

関連する問題