Я использую этот пример (веб-приложение + веб-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?