下面是一个示例代码,演示了如何在ASP.NET Core中使用JWT访问令牌进行签名和加密:
首先,你需要安装Microsoft.AspNetCore.Authentication.JwtBearer包,该包包含了JWT的身份验证中间件。
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
public class Startup
{
// ...
public void ConfigureServices(IServiceCollection services)
{
// 添加JWT身份验证服务
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your-issuer",
ValidAudience = "your-audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
};
});
// ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
// 启用身份验证中间件
app.UseAuthentication();
// ...
}
}
[Authorize]
属性来要求用户进行身份验证,并使用HttpContext.User.Identity.Name
来获取用户的名称。using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
public class MyController : Controller
{
[HttpGet]
[Authorize]
public IActionResult MyAction()
{
var username = HttpContext.User.Identity.Name;
// 执行你的逻辑
return Ok();
}
}
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;
public class TokenGenerator
{
public string GenerateToken()
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, "user-id"),
new Claim(JwtRegisteredClaimNames.Email, "user-email"),
// 添加其他自定义声明
};
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("your-secret-key");
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
}
这是一个简单的示例,使用JWT访问令牌进行身份验证和授权。你可以根据实际需求进行修改和扩展。