Дайджест-аутентификация в 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;
});
Другие вопросы по тегам