【发布时间】:2017-12-31 12:31:28
【问题描述】:
我厌倦了生成用于调用 apns 的 jwt 令牌。这是我的代码:
var header = new Dictionary<string, object>()
{
{ "kid" , keyID }
};
var payload = new Dictionary<string, object>()
{
{ "iss", teamID },
{ "iat", DateTimeOffset.Now.ToUnixTimeSeconds().ToString() }
};
var privateKey = GetApnsPrivateKey(authKeyPath);
var token = JWT.Encode(payload, privateKey, JwsAlgorithm.ES256, header);
public static CngKey GetApnsPrivateKey(string authKeyPath)
{
using (var reader = new StreamReader(new FileStream(authKeyPath, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
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);
代码在我的机器上运行得很好,但是在服务器上它在GetApnsPrivateKey 方法上抛出了这个异常:
System.Security.Cryptography.CryptographicException: The requested operation is not supported
在论坛上进行少量搜索后,我发现它是因为 CNG 密钥存储提供商:https://msdn.microsoft.com/en-us/library/windows/desktop/aa376242.aspx?f=255&MSPPError=-2147217396 现在我想知道有什么办法可以解决这个问题吗?
【问题讨论】:
-
EccKey.New不是 NetFx 方法,那么它从何而来/它的实现方式是什么? -
你好亲爱的@bartonjs。 EccKey.New 是 Cryptography 库方法。这是方法的完整路径:Security.Cryptography.EccKey.New(x, y, d);
标签: c# encryption cryptography public-key-encryption cng