ASP.Net Core ApiKey 身份认证简单实现
License
—
Deps
0
Install Size
—
Vulns
✓ 0
Published
May 21, 2025
$ dotnet add package Pandax.NetCoreAuth.ApiKeyASP.Net Core ApiKey 身份认证简单实现
示例代码可查看
Pandax.NetCoreAuth.ApiKey.Web项目
// 注册Apikey身份认证
builder.Services.AddAuthentication(ApiKeyDefaults.AuthenticationScheme)
.AddApiKey(options => { options.HeaderName = "x-apikey"; });
builder.Services.AddAuthorization();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
// 注册Jwt身份认证
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => { ... })
// 注册ApiKey身份认证
.AddApiKey(ApiKeyDefaults.ApiKey, options => { options.HeaderName = "x-apikey"; });
builder.Services.AddAuthorization(options =>
{
// 设置默认策略,支持配置的任意身份认证策略
options.DefaultPolicy = new AuthorizationPolicyBuilder(
JwtBearerDefaults.AuthenticationScheme,
ApiKeyDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();
});
在自己的项目中实现 IApiKeyValidator 接口,下面是简单的示例代码:
public class ApiKeyValidator : IApiKeyValidator
{
public Task<AuthenticateResult> ValidateApiKeyAsync(string apiKey, AuthenticationScheme scheme, HttpContext context)
{
var userId = Guid.CreateVersion7().ToString();
var success = !string.IsNullOrWhiteSpace(userId);
// 模拟验证失败
if (success == false)
{
return Task.FromResult(AuthenticateResult.Fail("Invalid API Key"));
}
// 创建 ClaimsIdentity
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, userId),
new Claim("permission", "product.create"),
new Claim("permission", "product.view"),
// 根据需要添加更多 Claim
};
var identity = new ClaimsIdentity(claims, scheme.Name);
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, scheme.Name);
var result = AuthenticateResult.Success(ticket);
return Task.FromResult(result);
}
}
然后注册身份验证实现类
// 注册ApiKey身份验证实现
builder.Services.AddApiKeyValidator<ApiKeyValidator>();
dotnet test --no-build --verbosity normal