gpt4 book ai didi

c# - 如何编码 JWT 以进行 APN 标记化(.NET、C#)

转载 作者:太空狗 更新时间:2023-10-30 00:38:22 26 4
gpt4 key购买 nike

我正在尝试通过标记化将推送通知发送到 APN。我尝试使用一些库(如 jose-jwt 和 Microsot Jwt 类)来创建 JWT token ,但我无法理解它。

我在创建 JWT 并使用私钥对其进行签名时遇到了困难。

为了与证书通信,我使用了 PushSharp,它工作得很好。任何人都可以帮我解决一个类似的工作示例但使用 token 吗?

编辑:在此处遵循 Apple 文档:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#//apple_ref/doc/uid/TP40008194-CH11-SW1

示例代码:我最接近的东西看起来像这样,但我不知道如何正确创建 CngKey

var payload = new Dictionary<string, object>()
{
{ "iss", issuer },
{ "iat", DateTime.UtcNow }
};

var headers = new Dictionary<string, object>()
{
{ "kid", keyIdentifier}
};

CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256); //how to create this CngKey

string token = Jose.JWT.Encode(payload, key, JwsAlgorithm.ES256, headers);

最佳答案

感谢您的回答,必须联系许多支持人员才能完成这项工作。这是最终结果的样子。

/// <summary>
/// Method returns ECDSA signed JWT token format, from json header, json payload and privateKey (pure string extracted from *.p8 file - PKCS#8 format)
/// </summary>
/// <param name="privateKey">ECDSA256 key</param>
/// <param name="header">JSON header, i.e. "{\"alg\":\"ES256\" ,\"kid\":\"1234567899"\"}"</param>
/// <param name="payload">JSON payload, i.e. {\"iss\":\"MMMMMMMMMM"\",\"iat\":"122222222229"}"</param>
/// <returns>base64url encoded JWT token</returns>
public static string SignES256(string privateKey, string header, string payload)
{
CngKey key = CngKey.Import(
Convert.FromBase64String(privateKey),
CngKeyBlobFormat.Pkcs8PrivateBlob);

using (ECDsaCng dsa = new ECDsaCng(key))
{
dsa.HashAlgorithm = CngAlgorithm.Sha256;
var unsignedJwtData =
Url.Base64urlEncode(Encoding.UTF8.GetBytes(header)) + "." + Url.Base64urlEncode(Encoding.UTF8.GetBytes(payload));
var signature =
dsa.SignData(Encoding.UTF8.GetBytes(unsignedJwtData));
return unsignedJwtData + "." + Url.Base64urlEncode(signature);
}
}

关于c# - 如何编码 JWT 以进行 APN 标记化(.NET、C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com