仅服务器端JWT使用X509Certificate2签名

仅服务器端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

我正在创建一个JWT,并使用存储在服务器上私有证书存储中的X509证书对其进行签名(而不是加密)

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);
不,这很好,我只想清除证书中用于签名和验证的密钥,因为我看到了相互冲突的声明


非常感谢不对称加密技术:

加密:

  • 公钥用于加密内容
  • 私钥用于解密内容
签字:

  • 私钥用于对内容进行签名
  • 公钥用于验证签名
你的两个假设都是相反的