Дайджест-проверка подлинности в ASP.NET Core / Kestrel

Можно ли использовать дайджест-аутентификацию в ASP.NET Core / Kestrel? Если да, как мне его включить и использовать?

Я знаю, что базовая аутентификация не реализована и не будет реализована, потому что считается небезопасным и медленным, но я вообще ничего не могу найти о дайджесте.

Я не хочу использовать аутентификацию IIS, потому что я не хочу быть привязанным к учетным записям Windows, я хочу использовать настраиваемую логику проверки учетных данных.


person Albireo    schedule 20.10.2016    source источник


Ответы (3)


Единственная реализация дайджест-аутентификации, доступная в настоящее время в Core, - это реализация в IIS, привязанная к интегрированной Windows-аутентификации.

person Tratcher    schedule 23.10.2016

Если кто-то ищет ответ. Этот код работает для меня:

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();
person Aleksey Rudenko    schedule 17.12.2018
comment
Как использовать это в ASP.NET Core? - person Anatolii Humennyi; 10.02.2021

Немного о Kestrel, серверах WebListener и аутентификации

  • Kestrel напрямую не поддерживает Windows Auth
  • вы должны использовать WebListener или IIS + Kestrel для достижения этого
  • вам просто нужно добавить forwardWindowsAuthToken = "true" в файл web.config - https://github.com/aspnet/IISIntegration/blob/dev/samples/IISSample/web.config#L13
  • WebListener предоставляет AuthenticationManager, который можно использовать для настройки аутентификации сервера.

И пример того, как вы можете разрешить анонимным пользователям использовать WebListener:

builder.UseWebListener(options =>
{    
     options.Listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.AllowAnonymous;
});
person Dawid Rutkowski    schedule 20.10.2016