ASP.NET 提供了 Claims 身份验证,利用 Claims,可以将用户的身份信息和授权信息存储在一个安全的令牌中,并将该令牌传输给客户端,从而实现身份验证和授权的功能。
以下是一个简单的示例,演示了如何在 ASP.NET Core 中使用 Claims 身份验证:
在 Startup.cs 文件中添加以下代码:
public void ConfigureServices(IServiceCollection services)
{
// 添加认证服务
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
// 省略其他配置代码
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 添加身份验证中间件
app.UseAuthentication();
// 省略其他配置代码
}
在控制器中添加以下代码:
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger _logger;
public WeatherForecastController(ILogger logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable Get()
{
// 从 Claims 中获取用户信息
var identity = HttpContext.User.Identity as ClaimsIdentity;
var userId = identity.Claims.FirstOrDefault(c => c.Type == "UserId")?.Value;
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)],
UserId = userId // 添加用户信息到响应中
})
.ToArray();
}
}
在