У меня есть настройка сервера идентификации со следующей конфигурацией «похож на»:
return new List<Client>
{
new Client
{
[...]
AllowedGrantTypes = GrantTypes.Implicit,
[....]
},
new Client
{
[...]
AllowedGrantTypes = GrantTypes.ClientCredentials,
[....]
}
};
и аннотациями, помеченными так:
[Route("api/forms")]
[ApiController]
[Authorize(Policy = "user.api.portfolio.manager")]
[Authorize(Policy = "application.api.portfolio.manager")]
public class FormsController : ControllerBase
{
[...]
}
и политикой
private System.Action<AuthorizationOptions> AddJwtAuthorizationPolicyForRole()
{
return options => { options.AddPolicy("**POLICY_FOR_GRANT_IMPLICIT**", policy => {
policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
policy.RequireAuthenticatedUser();
policy.RequireClaim(ClaimTypes.Role, "USER_ACCESSIBLE");
});
};
}
private System.Action<AuthorizationOptions> AddJwtAuthorizationPolicyForRole()
{
return options => { options.AddPolicy("**POLICY_FOR_CLIENT_CREDENTIALS**", policy => {
policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
policy.RequireAuthenticatedUser();
});
};
}
, поэтому я хочу достичь:
Клиенты, использующие GrantType.ClientCredentials, могут обращаться к контроллеру без каких-либо дополнительных потребностей. Клиенты, использующие неявную схему, должны иметь роль USER_ACCESSIBLE
Если она настроена так, как показано выше, обе политики должны применяться -> Оба типа предоставления не работают.
Как мне добиться описанного поведения с помощью IdentityServer, что у каждого типа гранта может быть независимая политика, которую следует применять?
Заранее благодарим за помощь.