【问题标题】:Server side only JWT signing with X509Certificate2仅服务器端使用 X509Certificate2 进行 JWT 签名
【发布时间】:2021-03-24 10:43:38
【问题描述】:

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

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);

不,这很好用,我只是想清除证书中用于签名和验证的密钥,因为我看到了冲突的语句。

非常感谢

【问题讨论】:

    标签: jwt signing bearer-token x509certificate2


    【解决方案1】:

    在非对称密码学中:

    加密:

    • 公钥用于加密内容
    • 私钥用于解密内容

    签名:

    • 私钥用于签署内容
    • 公钥用于验证签名

    你的两个假设是相反的。

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 2017-06-30
      • 1970-01-01
      • 2016-09-13
      • 2018-03-27
      • 2020-07-04
      • 2017-10-07
      • 2021-01-01
      • 2018-05-04
      相关资源
      最近更新 更多