در فایل xIds/Providers/XApiKeyAuthenticationHandler.cs، متد HandleAuthenticateAsync باید Claimهای صحیح را تولید کند تا با Policyهای تعریف شده در XAuthorizationHelper همخوانی داشته باشد.
نکته مهم: Policyهای ApiKey بر اساس Scope (مانند read, write, admin) کار میکنند، نه Role. بنابراین Claim از نوع JwtClaimTypes.Scope ضروری است.
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
// ... استخراج و اعتبارسنجی ApiKey ...
var validationResult = await applicationProvider.ValidateApiKey(apiKey, clientIP);
if (validationResult.Errors.HasChild())
return AuthenticateResult.Fail(string.Join(", ", validationResult.Errors));
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, validationResult.OwnerId),
new Claim(JwtClaimTypes.Subject, validationResult.OwnerId),
new Claim("application_id", validationResult.ApplicationId.ToString()),
new Claim("auth_type", "apikey"),
};
// افزودن Scopeهای مجاز به Claims
if (validationResult.Scopes != null)
{
foreach (var scope in validationResult.Scopes)
{
claims.Add(new Claim(JwtClaimTypes.Scope, scope));
}
}
var identity = new ClaimsIdentity(claims, Scheme.Name);
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, Scheme.Name);
return AuthenticateResult.Success(ticket);
}