Laden...

Windows-Authentication in ASP.NET Core 2.x Kestrel Projekt

Erstellt von MorphieX vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.584 Views
M
MorphieX Themenstarter:in
184 Beiträge seit 2012
vor 5 Jahren
Windows-Authentication in ASP.NET Core 2.x Kestrel Projekt

Hi,

ich sitze gerade an einem ASP.NET Core 2.1-Projekt mit eigener (Cookie-)Authentifizierung.
Die Authentifizierung sieht so aus, dass die Zugangsdaten

  • entweder komplett in der Anwendung verwaltet werden können (Benutzername + Passwort) und man sich entsprechend auch damit anmeldet,
  • oder der Benutzer nur (mindestens) mit seinem AD-Accountnamen angelegt, und ein Haken "LDAP Authentifizierung" gesetzt wird. Nun prüft die Authentifizierung nicht gegen ein in der Datenbank eingetragenes Passwort, sondern gegen einen LDAP-Server.

Das funktioniert so schon perfekt.

Jetzt möchten wir optional beim LDAP-Login auch SSO anbieten.
Nun ist es ja so, dass ASP.NET Core mit Kestrel keine Windows-Authentifizierung unterstützt, sondern dies maximal vom IIS oder vom WebListener (HttpSys) unterstützt wird.

Der IIS fällt raus, da wir in der Anwendung auch noch andere Background-Tasks (dauerhafte Kommunikation mit externen Schnittstellen) ausführen müssen, und ich diese nicht im IIS-Prozess durchführen möchte.

WebListener wäre eine Alternative, allerdings unterstützt der WebListener scheinbar keine Cookie-Authentifizierung mehr, wenn Windows Authentifizierung aktiviert ist. (https://github.com/aspnet/HttpSysServer/issues/284)

Also muss ich irgendwie bei Kestrel bleiben, was mir eigentlich auch ganz recht ist, da plattformunabhängig.

Nun bin ich über folgenden Stack-Overflow-Eintrag gestoßen:
https://stackoverflow.com/questions/34956808/asp-net-vnext-kestrel-windows-authentication
In der Lösung wurde ein ActionFilter gebaut, der eine NTLM-Authentifizierung simuliert. Simuliert deswegen, weil die Credentials nicht gegen einen LDAP-Server validiert werden, sondern nur der Username und Domain aus der NTLM-Authentifizierung herausgelesen werden.
Eigentlich genau das, was ich brauche, und es funktioniert auch wunderbar. Nur sehe ich hier eine große Sicherheitslücke.

Daher kann dieser Thread in min. zwei Richtungen verlaufen:

  1. gibt es Alternativen ein SSO mit Kestrel durchzuführen?
  2. hat schon jemand Erfahrungen, wie man die NTLM-Authentifizierung vollständig implementiert?

Btw. als LDAP-Library verwende ich Novell.Directory.Ldap.NETStandard2_0

M
MorphieX Themenstarter:in
184 Beiträge seit 2012
vor 5 Jahren

So, ich komme langsam zu dem Ergebnis, dass es gar nicht (so einfach) möglich ist.

NTLM über einen LDAP-Client ist nicht möglich, da man (zumindest beim Active Directory) keine Möglichkeit hat auf das gehashte Passwort des Benutzers zuzugreifen.
Windows selbst löst das wohl über die Secur32.dll, die es aber natürlich nur unter Windows gibt. Da hat man - wenn man plattformabhängig bleiben will - also keine Möglichkeit diese zu nutzen. Außer man implementiert die Funktionalität der Secur32.dll per reverse engineering selbst - nein, lieber nicht 😉

Möglicherweise brauche ich eine eigene Anwendung, die sich nur um das SSO kümmert und unter Windows gehostet werden muss. Hat da jemand Erfahrungen?

P
441 Beiträge seit 2014
vor 5 Jahren

Steht dir auch das Azure AD zur Verfügung?
Falls ja würde ich über OIDC gehen und vielleicht sogar die Accountverwaltung durch IdentityServer4 machen lassen, da bekommst du das schon fertig und musst dich in deiner Anwendung nicht mehr darum kümmern.

M
MorphieX Themenstarter:in
184 Beiträge seit 2012
vor 5 Jahren

Ist leider eine Anwendung die später an ganz unterschiedliche Kunden mit unterschiedlichen Umgebungen verkauft werden soll.
Aber ich schaue mir das auf jeden Fall noch mal an, danke 😃

3.003 Beiträge seit 2006
vor 5 Jahren

Das würde erst recht für IdentityServer4 sprechen 😃.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)