Я работаю над веб-приложением 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)
);
})
);