Несколько схем аутентификации и политики с WebAPI и NetCore 2.1 - PullRequest
0 голосов
/ 28 февраля 2020

У меня непонятное время, пытаясь заставить работать что-то, что кажется таким, каким оно должно быть, но, может быть, я что-то неправильно понимаю, основа c.

Наш сервис написан с NetCore 2.1 поддерживает настраиваемую аутентификацию. Он поддерживает аутентификацию ApiKey и Bearer Token. Один, оба или ни один из этих параметров не должен быть разрешен.

Аутентификация на жетоне-носителе также включает в себя политику, требующую определенной c области действия.

ApiKey не имеет требований к области действия ,

Что я обнаружил, учитывая способ, которым я сейчас настраиваю, так это то, что политика определения границ, связанная с аутентификацией Bearer, также применяется в схеме ApiKey, что приводит к невозможности авторизации, несмотря на правильную аутентификацию в обработчик аутентификации ApiKey.

Политики и авторизация добавляются следующим образом:

services.AddAuthorization(options =>
                         {
                           options.AddPolicy("BearerPolicy", builder =>
                           {
                                builder.RequireScope("Scope");
                                builder.AddAuthenticationSchemes("Bearer"); // shouldn't this make the policy only apply to Bearer Auth?
                           });
                           options.AddPolicy("ApiKeyPolicy", builder =>
                           {
                                builder.RequireClaim(ClaimTypes.Name,"Default");
                                builder.AddAuthenticationSchemes("ApiKey"); // shouldn't this make the policy only apply to ApiKey Auth?
                           });        
                         });

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

Контроллеры, для которых требуется аутентификация / авторизация, содержат следующие теги:

[Authorize(AuthenticationSchemes = "ApiKey", Policy = "ApiKeyPolicy")]
[Authorize(AuthenticationSchemes = "Bearer", Policy = "BearerPolicy")]

Я бы предположил, что эта настройка должна разрешить проверку подлинности ApiKey и Bearer, применяя правильную политику в зависимости от используемой.

Однако кажется, что учитываются ВСЕ политики, независимо от того, какая Аутентификация является Происходит.

Это умышленно, или я что-то упустил? Я вошел в код авторизации NetCore и обнаружил, что в нем всегда есть все политики, что я не считаю правильным, учитывая тот факт, что вы можете указать схемы аутентификации как в политике, так и в теге атрибута Authorize.

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

Мы используем IdentityServer4 для токена на предъявителя.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...