[英]How to Encryption JWT Payload with Public Key RSA_OAEP_256
我正在使用“BouncyCastle.NetCore”和“jose-jwt”庫對 web 令牌進行簽名和加密。 我可以通過以下代碼使用我的私鑰簽名。 但要求還執行 OpenID JWT 加密 為了加密 JWT 有效負載,我們需要使用提供的公鑰字符串(使用 X509 密鑰規范解碼的 base64)來執行此操作。 使用 RSA 算法和 JWE header 所需的編碼應包括 header 名稱“alg”,其值為:RSA_OAEP_256。下面的代碼僅使用私鑰簽名,但不確定如何完成編碼?
class Program
{
string publicKeyString = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB";
public static async Task Main(string[] args)
{
var payload = new System.Collections.Generic.Dictionary<string, object>()
{
{ "sub", "Testmr.x@contoso.com" },
{ "iss", "https://www.YourBrand.com" },
{ "exp", 1300819380 },
{ "iat", 1446111752 },
{ "preferred_username", "JohnDoe2" },
{ "phone_number", "+2-10-344-3765333" }
};
var token = CreateToken(payload);
Console.WriteLine($"token={token}");
}
public static string CreateToken(object payload)
{
string jwt = string.Empty;
var fileStream = System.IO.File.OpenText("C:\\temp\\my_private_key.pem");
var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(fileStream, new MyPasswordFinder());
var keyPair = (Org.BouncyCastle.Crypto.AsymmetricKeyParameter)pemReader.ReadObject();
RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(rsaParams);
jwt = JWT.Encode(payload, rsa, JwsAlgorithm.RS256);//,options: new JwtOptions { EncodePayload = true }
}
return jwt;
}
}
EncodePayload
似乎唯一的區別是有效載荷如何最終被寫入 JWT 主體。 默認情況下為true
,並且不影響有效負載加密(請參閱源代碼):
return jwtOptions.EncodePayload
? Compact.Serialize(headerBytes, payloadBytes, signature)
: Compact.Serialize(headerBytes, Encoding.UTF8.GetString(payloadBytes), signature);
您可能想要的是指定JweAlgorithm
並更正JweEncryption
(注意,它是相同 function 的不同重載:
jwt = JWT.Encode(payload, rsa, JweAlgorithm.RSA_OAEP_256, JweEncryption.A256GCM);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.