Вызывающий метод HandleRequirementAsyn c в AuthorizationHandler <Requirement>, отсутствуют утверждения пользователя в AuthorizationHandlerContext - PullRequest
0 голосов
/ 15 марта 2020

Я использую этот пример (веб-приложение + веб-API) , чтобы узнать, как использовать Azure B2 C для защиты моего веб-API с использованием do tnet core и Azure AD b2. c.

Все работает нормально, кроме 401 Несанкционированного вызова, когда я пытаюсь получить доступ к конечной точке api/todolist. Я добавил точки останова, чтобы понять, что может быть не так. Я обнаружил, что обработчик политики / требований не может получить удостоверение пользователя из AuthorizationHandlerContext (строка 31 в этом файле) после успешного входа в систему через B2 C:

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                        ScopesRequirement requirement)
        {
            // If there are no scopes, do not process
            if (!context.User.Claims.Any(x => x.Type == ClaimConstants.Scope)
               && !context.User.Claims.Any(y => y.Type == ClaimConstants.Scp))
            {
                return Task.CompletedTask; // returned here without processing
            }

            Claim scopeClaim = context?.User?.FindFirst(ClaimConstants.Scp);

            if (scopeClaim == null)
                scopeClaim = context?.User?.FindFirst(ClaimConstants.Scope);

            if (scopeClaim != null && scopeClaim.Value.Split(' ').Intersect(requirement._acceptedScopes).Any())
            {
                context.Succeed(requirement);
            }

            return Task.CompletedTask;
        }

Вышеуказанный метод был возвращен в первом if-блоке без обработки, поскольку контекстный объект AuthorizationHandlerContext не имеет утверждений пользователя даже после успешного входа в систему B2 C.

Поэтому мне было интересно, как атрибут [Authorize] в контроллере вызывает обработчик, и я не уверен, как он заполняет утверждения пользователя в объекте AuthorizationHandlerContext. Получает ли он это от повара ie?

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