основной идентификатор: AuthorizationPolicy названный не был найден - PullRequest
0 голосов
/ 17 января 2019

Я хочу добавить пользовательские политики для двухэтапной авторизации, чтобы после первого шага у пользователя был доступ ко второму шагу, а после этого ко всему. Когда у меня была одна политика, все работало нормально, но когда я добавил другую, я начал получать эту ошибку. Как добавить политики:

AuthorizationOptions authOptions = new AuthorizationOptions();

authOptions.AddPolicy("FirstStepCompleted", policy => policy.RequireClaim("FirstStepCompleted"));
authOptions.AddPolicy("Authorized", policy => policy.RequireClaim("Authorized"));

services.AddAuthorization(o => o = authOptions);

Когда у меня была одна политика, я добавлял ее так:

services.AddAuthorization
(
    options => options.AddPolicy("FirstStepCompleted",
    policy => policy.RequireClaim("FirstStepCompleted"))
);

Что я делаю не так?

UPD1. Забыли исключение:

Произошло необработанное исключение при обработке запроса. InvalidOperationException: AuthorizationPolicy с именем: «FirstStepCompleted» не найден. Microsoft.AspNetCore.Authorization.AuthorizationPolicy.CombineAsync (IAuthorizationPolicyProvider policyProvider, IEnumerable authorizeData)

1 Ответ

0 голосов
/ 17 января 2019

Для вызова AddAuthorization требуется делегат, который получит экземпляр AuthorizationOptions для настройки. В вашем неудачном примере вы пытаетесь заменить этот существующий экземпляр AuthorizationOptions на новый, созданный вами выше (authOptions), который не имеет реального эффекта (см. * 1007 от Jon Skeet's). * ответ для получения дополнительной информации о переназначении параметров). В конечном итоге это означает, что вы не добавляете политики .

Если вы хотите добавить несколько политик в делегат, вы можете использовать следующее:

services.AddAuthorization(o =>
{
    o.AddPolicy("FirstStepCompleted", policy => policy.RequireClaim("FirstStepCompleted"));
    o.AddPolicy("Authorized", policy => policy.RequireClaim("Authorized"));
});
...