使用以下代码,我可以生成加密的JWT令牌。但它给出了5个部分。我只需要3个部分。所以可以帮助我获得所需的代码。
var jwt = new JwtSecurityToken(
issuer: "asds",
audience: "sds",
claims: cliams,
notBefore: DateTime.Now,
signingCredentials: signingCredentials,
expires: DateTime.Now.AddHours(1)
);
var ep = new Microsoft.IdentityModel.Tokens.EncryptingCredentials(securityKey1, Microsoft.IdentityModel.Tokens.SecurityAlgorithms.Aes256KW, Microsoft.IdentityModel.Tokens.SecurityAlgorithms.Aes256CbcHmacSha512);
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
var a = tokenHandler.CreateJwtSecurityToken("issuer", "Audience", new ClaimsIdentity(cliams), DateTime.Now, DateTime.Now.AddHours(1), DateTime.Now, signingCredentials, ep);
string tokenString2 = tokenHandler.WriteToken(a);
Console.WriteLine("Token string: {0}", tokenString);
var encodedtext = new JwtSecurityTokenHandler().WriteToken(a);
答案 0 :(得分:0)
我假设"部分"你指的是紧凑的序列化格式......对吗?根据这个假设,我建议你检查为什么要创建加密的JWT而不是你想要的签名JWT。
来自JSON Web Signature (JWS) RFC:
在JWS Compact Serialization中,JWS表示为串联:BASE64URL(UTF8(JWS Protected Header))|| '' || BASE64URL(JWS有效载荷)|| '' || BASE64URL(JWS签名)
...导致JWT有三个部分和两个分隔符。
来自JSON Web Encryption (JWE) RFC:
JWE Compact Serialization将加密内容表示为紧凑的URL安全字符串。该字符串是:BASE64URL(UTF8(JWE Protected Header))|| '' || BASE64URL(JWE加密密钥)|| '' || BASE64URL(JWE初始化向量)|| '' || BASE64URL(JWE Ciphertext)|| '' || BASE64URL(JWE认证标签)
...导致JWT有五个部分和四个分隔符。