温馨提示×

c# jwtbuilder如何设置密钥

c#
小樊
94
2024-12-12 21:56:13
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在C#中,使用System.IdentityModel.Tokens.Jwt库创建JWT时,需要设置密钥。以下是一个简单的示例,展示了如何使用JwtSecurityTokenBuilder设置密钥:

首先,确保已安装System.IdentityModel.Tokens.Jwt库。如果尚未安装,请在项目中运行以下命令:

dotnet add package System.IdentityModel.Tokens.Jwt

然后,创建一个C#类并编写以下代码:

using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

public class JwtTokenBuilder
{
    public static string CreateJwtToken(string issuer, string audience, string secretKey, int expirationMinutes)
    {
        var claims = new[]
        {
            new Claim(ClaimTypes.Name, "John Doe"),
            new Claim(ClaimTypes.Email, "john.doe@example.com")
        };

        var key = Encoding.UTF8.GetBytes(secretKey);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.UtcNow.AddMinutes(expirationMinutes),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
        };

        var token = new JwtSecurityToken(issuer, audience, tokenDescriptor);

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}

在这个示例中,我们创建了一个名为JwtTokenBuilder的类,其中包含一个名为CreateJwtToken的静态方法。该方法接受以下参数:

  • issuer:颁发者(例如,“https://example.com”)。
  • audience:接收者(例如,“https://example.com/api”)。
  • secretKey:用于签名和验证JWT的密钥(例如,“your-256-bit-secret”)。
  • expirationMinutes:JWT的过期时间(例如,30分钟)。

在方法内部,我们创建了一个包含一些声明(例如,用户名和电子邮件地址)的Claim数组。然后,我们将密钥转换为字节数组,并使用它创建一个SymmetricSecurityKey。接下来,我们创建一个SecurityTokenDescriptor,并将其签名凭据设置为使用SymmetricSecurityKeyHmacSha256Signature算法。最后,我们使用JwtSecurityTokenHandler生成JWT并将其返回给调用者。

要使用此方法创建JWT,只需调用它并传入适当的参数即可:

string issuer = "https://example.com";
string audience = "https://example.com/api";
string secretKey = "your-256-bit-secret";
int expirationMinutes = 30;

string jwtToken = JwtTokenBuilder.CreateJwtToken(issuer, audience, secretKey, expirationMinutes);
Console.WriteLine(jwtToken);

这将生成一个包含声明和过期时间的JWT,并使用指定的密钥进行签名。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:c# jwtbuilder如何刷新token

0