仅服务器端JWT使用X509Certificate2签名
我正在创建一个JWT,并使用存储在服务器上私有证书存储中的X509证书对其进行签名(而不是加密)仅服务器端JWT使用X509Certificate2签名,jwt,signing,bearer-token,x509certificate2,Jwt,Signing,Bearer Token,X509certificate2,我正在创建一个JWT,并使用存储在服务器上私有证书存储中的X509证书对其进行签名(而不是加密) var signingCredentials = new SigningCredentials(new X509SecurityKey(nameOfX509Certificate2), SecurityAlgorithms.RsaSha256Signature); var tokenDescriptor = new SecurityTokenDescriptor() { Subject
var signingCredentials = new SigningCredentials(new X509SecurityKey(nameOfX509Certificate2),
SecurityAlgorithms.RsaSha256Signature);
var tokenDescriptor = new SecurityTokenDescriptor()
{
Subject = new ClaimsIdentity(new[] {
new Claim("Admin", "YES", ClaimValueTypes.String)
}),
Audience = "ValidAudience",
Issuer = "ValidIssuer",
Expires = DateTime.Now.AddMinutes(5),
SigningCredentials = signingCredentials
};
JwtSecurityToken stoken = null;
var tokenHandler = new JwtSecurityTokenHandler();
stoken = tokenHandler.CreateJwtSecurityToken(tokenDescriptor);
var jwt = tokenHandler.WriteToken(stoken);
这是在服务器端完成的,令牌仅在服务器端与其他服务器上的应用程序共享。。因此,没有进行客户端签名。
我的问题是,在这一点上,证书中的公钥是否用于签名?我的假设是这样的,因为我们使用的是非对称RSASHA256算法
下面是验证令牌的代码,同样是服务器端,使用最初用于签名的相同证书。
因此,我的假设是,私钥被用于验证接收应用程序的令牌……对吗
jwt = "eyJxxxxxxxxxxxxxx...."
var signingKey = MyCertificateHelper.SigningKey(nameOfX509Certificate2); // Returns X509SecurityKey
var decryptKey = MyCertificateHelper.DecryptKey(nameOfX509Certificate2); // Returns X509SecurityKey
//Set up the parameters to validate the token
var tokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = new[] { "ValidAudience" },
ValidIssuers = new[] { "ValidIssuer" },
IssuerSigningKey = signingKey,
TokenDecryptionKey = decryptKey
};
// SecurityToken validatedToken;
var handler = new JwtSecurityTokenHandler();
principal = handler.ValidateToken(jwt, tokenValidationParameters, validatedToken: out var validatedToken);
不,这很好,我只想清除证书中用于签名和验证的密钥,因为我看到了相互冲突的声明
非常感谢不对称加密技术: 加密:
- 公钥用于加密内容
- 私钥用于解密内容
- 私钥用于对内容进行签名
- 公钥用于验证签名