Laden...

ASP.NET - Authorisierungsdaten von WebAPI in MVC-Projekt weiterverwenden

Erstellt von guenni81 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.965 Views
G
guenni81 Themenstarter:in
205 Beiträge seit 2003
vor 8 Jahren
ASP.NET - Authorisierungsdaten von WebAPI in MVC-Projekt weiterverwenden

Hallo Zusammen,

aktuell bin ich am einarbeiten in ASP.NET MVC und der Web Api. Zu diesem Zweck setze ich aktuell ein Lernprojekt um und bin aktuell auf ein Problem gestoßen.

Die Planung ist bisher so das die Web Api quasi die Funktionalität für bereitstellen soll und das MVC Projekt soll diese konsumieren. Das erstellen eines neuen Benutzers bzw. einloggen funktioniert soweit. Ich kann mir auch über einen HTTPClient und den Benutzer Daten ein Token von dort geben lassen (OWIN BearerToken). Momentan kommt bei mir allerdings die Frage auf welche Möglichkeiten es gibt von der Web API die relevanten Daten für den Benutzer (Rollen, Claims) zu erhalten und mit diesen dann in der MVC App quasi zu arbeiten bzw. die Controller zu beschränken.

Hat eventuell jemand ein Tipp für mich wie ich dies am geschicktesten Umsetzen kann?

16.834 Beiträge seit 2008
vor 8 Jahren

Es gibt zwei verschiedene Elemente beim Login: die Authentifizierung und die Authorisierung.
Letztere ist für die Beschränkung der Funktionalität zuständig.

Für die Controller von WebAPI und MVC gibt es das Authorize-Attribut, mit dem man das durchführen kann.
Oder man implementiert es in die Business-Logik bzw. den Business-Layer.
Das Attribut kann nicht alle Elemente der Authorisierung abdecken.

G
guenni81 Themenstarter:in
205 Beiträge seit 2003
vor 8 Jahren

Hallo Abt,

dank für deine Antwort! Das mit der Authentifizierung und Authorisierung ist mir soweit klar, ich habe nur das Problem das die Authentifizierung an der Web Api stattfindet und ich nicht genau weiß wie ich diese Informationen zum MVC Web bekomme damit ich hier mit dem Authorize-Attribut arbeiten bzw. dies in die Logik mit einbauen kann.

16.834 Beiträge seit 2008
vor 8 Jahren

Im Prinzip ist dann die WebAPI Deine Drittanwendung für OAuth, also quasi wie ein Client.
Die WebAPI muss also Dein OAuth-Provider darstellen. MVC bekommt dann nur den Token Deiner Authentifizierung.

Wenn Deine WebAPI in der gleichen Anwendung wie MVC liegt (gemeinsames Projekt) hast Du ja automatisch nach dem Login in allen MVC Controllern die Identity.
Aber dann braucht man i.d.R. kein OAuth.

G
guenni81 Themenstarter:in
205 Beiträge seit 2003
vor 8 Jahren

Genau, das MVC Web bekommt quasi einen Token um die Funktionen der WebAPI aufzurufen.
Beim dem MVC Web und der WebAPI handelt es sich um zwei getrennte Projekte.
Ist es eventuell Möglich das ich ein SignIn bei der WebAPI durchführe und darauf im Web Projekt reagiere?
Wobei ich hier schätzungsweise eher bei der Authorisierung selbst Hand anlegen muss. Die Rollen und Claims kann ich mir ja bei dem Result vom Token JSON mit reinpacken.

Wahrscheinlich denke ich hier grade zu Umständlich oder übersehe etwas. 😉

16.834 Beiträge seit 2008
vor 8 Jahren

Streng genommen musst Du dann das MVC Projekt als Client des OAuth Providers registrieren (so wie Du zB bei Facebook Deine App auch registrieren musst).

Und dann kannst Du einfach nur im App_Start Deine WebAPI als OAuth Server registrieren (so wie es im Template mit Google, Facebook.. Beispielhaft gemacht ist); den Rest macht alles Owin für Dich.
Im Prinzip kannste die gleichen URLs anschauen, wie ein anderer User 2-3 Tage zuvor hier
OWIN: Oauth WebApis sichern

Wenn Du aber gar keine anderen Clients auf Deine API Zugreifen lassen willst, sondern nur die MVC Anwendung, dann würde ich OAuth weg lassen und einfach die Sessions zwischen beiden Instanzen teilen.
Accessing Session Using ASP.NET Web API.

OAuth lohnt sich wirklich nur, wenn man die API von Dritten zugreifen lassen will.

G
guenni81 Themenstarter:in
205 Beiträge seit 2003
vor 8 Jahren

Ok, dann werde ich mir das mal anschauen und versuchen.
Vielen Dank für die Hilfe! 😉