Дайджест-аутентификация в ASP.NET Core / Kestrel
Можно ли использовать дайджест-проверку подлинности в ASP.NET Core / Kestrel? Если это так, как я могу включить и использовать его?
Я знаю, что базовая аутентификация не реализована и не будет реализована, потому что она считается небезопасной и медленной, но я ничего не могу найти о дайджесте.
Я не хочу использовать аутентификацию IIS, потому что я не хочу привязываться к учетным записям Windows, я хочу использовать собственную логику проверки учетных данных.
2 ответа
Единственная реализация дайджест-аутентификации, доступная в настоящее время в Core, - это та, что в IIS связана с интегрированной аутентификацией Windows.
Если кто-то ищет ответ. Этот код работает для меня:
using System.ServiceModel;
var binding = new BasicHttpBinding();
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Digest;
binding.TextEncoding = Encoding.UTF8;
binding.TransferMode = TransferMode.Buffered;
binding.AllowCookies = false;
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
var endpoint = new EndpointAddress(new Uri("http://website.domain/WebService.svc"));
var client = new MessageServiceClient(binding, endpoint);
client.ClientCredentials.HttpDigest.ClientCredential.UserName = "username";
client.ClientCredentials.HttpDigest.ClientCredential.Password = "password";
var response = client.CallMethod();
Немного о Kestrel, серверах WebListener и аутентификации
- Kestrel не поддерживает напрямую Windows Auth
- Вы должны использовать WebListener или IIS + Kestrel для достижения этой цели
- вам просто нужно добавить forwardWindowsAuthToken="true" в ваш файл web.config - https://github.com/aspnet/IISIntegration/blob/dev/samples/IISSample/web.config
- WebListener предоставляет AuthenticationManager - который можно использовать для настройки аутентификации сервера.
И пример, как вы можете разрешить анонимным пользователям использовать WebListener:
builder.UseWebListener(options =>
{
options.Listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.AllowAnonymous;
});