x509certificate2 为 .net core 2.1 中的 jwt 签名
x509certificate2 sign for jwt in .net core 2.1
我可以使用 JWT 库制作 JWT 令牌,但出于各种原因,我必须手工制作一个。我有一个 X509Certificate2 对象,其中包含 public 和私钥 - 我可以在网上找到大量不同的代码,这些代码使用其中的私钥进行签名 - 有时将其转换为 rsacryptoprovider,有时将其拉出作为xml - 我发现了大约十种不同的方法。
它们都在 .net 框架中工作。我试过的 nothing 在 net core 2.1 中有效(即使是那些明确表示它们适用于 .net core 的)。私钥对象是 RSACng,而不是加密提供者 - 任何尝试调用到达 xml 的方法或私有属性都表示操作不受支持 - 并且 RsaCng 上没有签名方法。
我有一堆字节作为有效载荷,还有一个完全填充的 X509certificate2 对象(从 .pfx 文件读取)- 我想要的只是签署一个字符串。有什么想法吗?
结果比我想象的要容易 - 我使用的是 System.IdentityModel.Tokens.JWT - 出于某种原因,salesforce 不喜欢它从 JWT 函数生成的 JWT(可能是因为它添加了大量其他属性)但是无论如何 - 我追踪了它所做的代码 - 你可以使用它的实用程序 - 所以如果你自己创建 JWT 有效负载 - 以下代码会生成有效的 JWT:
var unsigned = Base64UrlEncoder.Encode(header) + "." + Base64UrlEncoder.Encode(payload);
var x509 = new X509Certificate2(pfxFilename, certificatePassword);
var signingCredentials = new X509SigningCredentials(x509, "RS256");
var signature = JwtTokenUtilities.CreateEncodedSignature(unsigned, signingCredentials);
return unsigned + "." + signature;
我可以使用 JWT 库制作 JWT 令牌,但出于各种原因,我必须手工制作一个。我有一个 X509Certificate2 对象,其中包含 public 和私钥 - 我可以在网上找到大量不同的代码,这些代码使用其中的私钥进行签名 - 有时将其转换为 rsacryptoprovider,有时将其拉出作为xml - 我发现了大约十种不同的方法。
它们都在 .net 框架中工作。我试过的 nothing 在 net core 2.1 中有效(即使是那些明确表示它们适用于 .net core 的)。私钥对象是 RSACng,而不是加密提供者 - 任何尝试调用到达 xml 的方法或私有属性都表示操作不受支持 - 并且 RsaCng 上没有签名方法。
我有一堆字节作为有效载荷,还有一个完全填充的 X509certificate2 对象(从 .pfx 文件读取)- 我想要的只是签署一个字符串。有什么想法吗?
结果比我想象的要容易 - 我使用的是 System.IdentityModel.Tokens.JWT - 出于某种原因,salesforce 不喜欢它从 JWT 函数生成的 JWT(可能是因为它添加了大量其他属性)但是无论如何 - 我追踪了它所做的代码 - 你可以使用它的实用程序 - 所以如果你自己创建 JWT 有效负载 - 以下代码会生成有效的 JWT:
var unsigned = Base64UrlEncoder.Encode(header) + "." + Base64UrlEncoder.Encode(payload);
var x509 = new X509Certificate2(pfxFilename, certificatePassword);
var signingCredentials = new X509SigningCredentials(x509, "RS256");
var signature = JwtTokenUtilities.CreateEncodedSignature(unsigned, signingCredentials);
return unsigned + "." + signature;