c# - JWT TOKEN 生成 Client_Assertion

标签 c# .net jwt access-token

我是 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/

相关文章:

c# - 代码为 "finish off a graph"

c# - 使用 C# 生成 Word 文档

c# - C#、.NET 中的 Google Api OAuth

c# - Word 2007 为操作形状但在 Word 2010 中正常工作的互操作代码引发异常

javascript - 如何在整个 session 期间保留 JWT token 直到用户注销?

javascript - 当有人直接打开页面时如何进行基于 token 的身份验证

c# - 什么时候必须在 C# 中使用 extern alias 关键字?

c# - 事务范围锁表

c# - DataTable 的每一行作为一个类?

jwt - 将 on_premise_sam_account 属性添加到 Azure 广告的 JWT 声明