我是 JWT 访问 token 生成方面的新手。我有公钥、私钥和 ClientID。我需要生成 Client_Assertion。
client_assertion:JWT(由客户端 ID、公共(public)证书和私钥使用 RS256作为签名算法)。
我找到了一些 Node.JS 代码,但我想使用 .Net Framework(不是 .Net Core)来实现 Node.Js 代码可以在 this link 上看到
我需要用 C# 来完成。从哪里开始以及如何实现?
最佳答案
我使用了 .NET 库
- System.IdentityModel.Tokens.Jwt
- Microsoft.IdentityModel.Tokens
- Microsoft.IdentityModel.JsonWebTokens
我还假设,正如您所说,您有一个私钥,并且您已将其加载到 RSACryptoServiceProvider
这是我的示例代码
首先创建您的领地。这是您的 JWT 负载
var claims = new Claim[]
{
new Claim(MicrosoftJwt.JwtRegisteredClaimNames.Sub, "your subject"),
new Claim(MicrosoftJwt.JwtRegisteredClaimNames.Iat, DateTime.Now.ToEpochSeconds().ToString(), ClaimValueTypes.Integer),
new Claim(MicrosoftJwt.JwtRegisteredClaimNames.Exp, DateTime.Now.AddMinutes(60).ToEpochSeconds().ToString(), ClaimValueTypes.Integer),
};
然后您需要使用您的私钥配置您的签名凭据。
// Assuming you already have your key loaded into an RSACryptoServiceProvider
var key = new MicrosoftTokens.RsaSecurityKey(csp)
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha256);
现在您可以创建您的 token
var jwt = new JwtSecurityToken(
issuer : issuer,
audience : audience,
claims : claims,
signingCredentials: signingCredentials
);
// You can add extra items to your Header if necessary
jwt.Header.Add("kid", deviceId);
然后您可以将 token 写入字符串
var assertion = new JwtSecurityTokenHandler().WriteToken(jwt);
我认为 assertion
的值(value)就是你想要得到的
关于c# - JWT TOKEN 生成 Client_Assertion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67821344/