在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
,并将其签名凭据设置为使用SymmetricSecurityKey
和HmacSha256Signature
算法。最后,我们使用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,并使用指定的密钥进行签名。