Laden...

windows identity bei ASP.NET core 3.1 web api app und vue.js SPA

Erstellt von camelord vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.854 Views
camelord Themenstarter:in
256 Beiträge seit 2006
vor 3 Jahren
windows identity bei ASP.NET core 3.1 web api app und vue.js SPA

Hi
ich erstelle gerade eine Intranet Seite, die im Backend ASP.NET core 3.1 web api verwendet und im frontend vue.js (SPA app). Die SPA App redet über REST API mit der api app.

Da wir uns im Intranet befinden, verwende ich das vorhandene Active Directory um Logins zu authentifizieren und zu authorisieren.

Wenn mich nicht alles täuscht, muss ich die AD authentifizierung selbst machen und kann mich nicht an standards bedienen wie "windows identity", da die SPA App nur aus HTML und Javascript besteht und deshalb nicht auf den aktuell angemeldeten Windows Benutzer zugreifen kann - richtig?
Die api app kann das natürlich, bringt aber nichts, da sie nur den service user ausgibt, der die api app laufen lässt..

Gruß
camelord

16.807 Beiträge seit 2008
vor 3 Jahren

Die Backend-Authentifizierung (bzw. der User Store) spielt für die SPA nur eine untergeordnete Rolle.

Die SPA spricht mit einem JWT Token mit der API; in dem Token steht ja nicht nur die Authentifizierung sondern auch Authorisierung.

Siehe auch
Authentication and authorization for SPAs und Configure Windows Authentication in ASP.NET Core

camelord Themenstarter:in
256 Beiträge seit 2006
vor 3 Jahren

Danke für die schnelle Antwort!
Also Credentials in der SPA Frontend Seite eingeben lassen, diese an das api app Backend schicken, dort manuell authentifizieren/authorisieren und ein token erzeugen - ab diesem Zeitpunkt mit Token bei der Frontend und Backend Kommunikation arbeiten.

Korrekt?

16.807 Beiträge seit 2008
vor 3 Jahren

Wenn Du das möchtest kannst Du das mit den Credentials durchaus so machen; ist aber im Intranet dank Kerberos Ticket (erfordert IIS) nicht unbedingt notwendig.

Du kannst problemlos via Integrated Security (also Active Directory) die Authentifzierung ohne Credentials ausführen, um den Token auszustellen.
Wichtig ist, dass der Token im SPA landet, sodass der Token dann für die API-Requests verwendet werden kann.

camelord Themenstarter:in
256 Beiträge seit 2006
vor 3 Jahren

OK, hört sich gut an..

Mir fehlt noch die Info, wie der Windows User, der über die SPA App kommen müsste, an das Backend (web api app) übertragen wird, sodass er im Backend authentifiziert und authorisiert werden kann?
Woher kennt die SPA (vue.js) App den windows user?

16.807 Beiträge seit 2008
vor 3 Jahren

Von einer Server-Side App like ASP.NET oder NodeJS..
Die brauchste ja sowieso für die API / das Ausstellen der Token.

Hinzu kommt, dass eine SPA ja immer in einem Server Side Context gehostet werden sollte, sonst kannst die App ja gar nicht zentral (über Environment Vars) konfigurieren.
Und Configs im Quellcode haben ja nichts zu suchen 😃

5.657 Beiträge seit 2006
vor 3 Jahren

Woher kennt die SPA (vue.js) App den windows user?

Unter Angular reicht es, beim HttpClient die withCredentials-Eigenschaft auf true zu setzen. Dann werden die Credentials des aktuellen Benutzers an den Server weitergegeben. Wie das bei Vue funktioniert, weiß ich nicht.

Weeks of programming can save you hours of planning

camelord Themenstarter:in
256 Beiträge seit 2006
vor 3 Jahren

Super!! Vielen Dank euch beiden..
Jetzt geht es mit Windows Credentials - kein Username mehr nötig - Single Sign-on in dem Fall.

6.911 Beiträge seit 2009
vor 3 Jahren

Hallo,

Wie das bei Vue funktioniert, weiß ich nicht.

Im Grunde genau gleich, nur dass Vue.js von Haus aus kein HTTP-API dabei hat (damit es schlank bleibt). Wird aber z.B. axios verwendet, so gibt es dort die gleiche Einstellung withCredentials.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

camelord Themenstarter:in
256 Beiträge seit 2006
vor 3 Jahren

Genau - mit Axios hab ichs auch gemacht..