Ошибка авторизации (401) в ядре .net при вызове api к api в аутентификации windows - PullRequest
0 голосов
/ 06 июня 2018

Создано 2 веб-API с использованием .Net Core 2.0 и размещено внутри IIS под аутентификацией Windows (анонимный доступ отключен) на одном сервере.Оба API-интерфейса работают с одной и той же учетной записью службы с соответствующими разрешениями / ролегруппами в Active Directory.Тем не менее, получить 401 несанкционированную ошибку при использовании одного API от другого.Использование HTTPClient для выполнения вызовов API.Обратите внимание, что он работает при доступе ко 2-й конечной точке API напрямую через браузер, но не из другого API.

Украшено фильтром Authorize в контроллере

[Authorize(Policy = "ValidRoleGroup")]

Запустите код в ConfigureServices в обеих службах APIкак показано ниже.

services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
    options.AddPolicy("ValidRoleGroup", policy => policy.RequireRole(Configuration["SecuritySettings:ValidRoleGroup"]));
});

services.AddMvc(configure =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();

    configure.Filters.Add(new AuthorizeFilter(policy));
});

services.Configure<IISOptions>(options =>
{
    options.AutomaticAuthentication = true;
    options.ForwardClientCertificate = true;
});

services.AddMvc();
services.AddScoped<HttpClient>(c => new HttpClient(new HttpClientHandler()
{
    UseDefaultCredentials = true,
    PreAuthenticate = true,
    ClientCertificateOptions = ClientCertificateOption.Automatic,
}));

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders =
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

1 Ответ

0 голосов
/ 14 июня 2018

Ошибки 401 исчезли после добавления записей реестра, как описано в статье ниже (Способ 1)

https://support.microsoft.com/en-us/help/896861/you-receive-error-401-1-when-you-browse-a-web-site-that-uses-integrate

Обратите внимание, что данные значения должны быть фактическим URL домена (XXX.com), а не имя машины.

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