ASP.NET Core 2.1: как выйти из системы, если пользователь прошел проверку подлинности NTLM? - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над веб-приложением ASP.NET Core 2.1 для внутреннего инструмента в моей организации.Мне нужен был способ управления аутентификацией и авторизацией без лишних дополнительных затрат.Я остановился на аутентификации NTLM, потому что это было легко реализовать, и потому что системным администраторам нравилась возможность использовать группы AD для ограничения доступа к инструменту.

Однако я не могу понять, какпозволить пользователю выйти из приложения.HttpContext.SignOutAsync() не поддерживает аутентификацию NTLM, и я не уверен, где еще искать.«Пользователь должен иметь возможность выйти» - это жесткое требование.

Вот (рабочий) код, который я использую для включения аутентификации:

  • Я создал разделappsettings.json, называемый AuthenticatedGroups, для размещения SID и метаданных группы Active Directory, для разрешенных групп
  • services является экземпляром Microsoft.Extensions.DependencyInjection.IServiceCollection
var authenticatedGroups = _configuration.GetSection("AuthenticatedGroups").Get<List<AuthenticatedGroup>>();

services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);
services.PostConfigure<HttpSysOptions>(x => x.Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate)
    .Configure<HttpSysOptions>(x => x.Authentication.AllowAnonymous = false);

services.AddAuthorization(
    x => x.AddPolicy("BicomAuthorization", policy => {
        policy.RequireAssertion(
            u => authenticatedGroups
                .Select(group => u.User.HasClaim("http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", group.SID))
                .Any(hasClaim => hasClaim == true)
        );
    })
);
...