Laden...

ASP.NET Core Web API Authentication überspringen

Erstellt von just vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.794 Views
J
just Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren
ASP.NET Core Web API Authentication überspringen

Hallo zusammen

Ich schreibe eine Webapplikation mit ASP.NET Core - WEB API (Rest und nicht konventionelle MVC).
Für die Basic Authentication benutze ich ein Custom-Middleware gemäss dieses Beispiels.
Es funktioniert alles so weit. Nun habe ich aber einen Fall, dass sich Benutzer registrieren können sollen. Da müsste ich einem Benutzer ohne Benutzername und Passwort erlauben die Action für die Registrierung benutzen. Normalerweise (bei einer ASP.NET Applikation) kann man ja der Aktion ein Custom-Attribut verpassen und dann im Authenticationfilter kontrollieren, ob die Action mit diesem Attribut ausgestattet ist - wenn ja, dann den Authentication-Vorgang überspringen.

Das Problem ist nur, dass HttpContext (siehe Beispiel) keinen ActionDescriptor beinhaltet und somit habe ich keine Infos über die Aktion (Methode) welche aufgerufen werden sollte.

Weiss jemand, wie man diesen Fall behandeln kann?

2.298 Beiträge seit 2010
vor 6 Jahren

Bei deinem Link ist doch auch ein Beispiel dabei, wie du das nur für bestimmte Controller ausführst.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

D
985 Beiträge seit 2014
vor 6 Jahren

Dann schau dir mal github: idunno.Authentication an.

Ist ähnlich aber sieht "richtiger" in der Umsetzung aus.

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo just,

du hast auch den Path im Request. Somit kannst du den prüfen und entsprechend reagieren. Wieso nimmst du nicht den Identity Server? Dann kannst du ganz normal mit dem Authorize-Attribut schaffen und eben auch mit dem AllowAnonymous-Attribut.

Gruss

Coffeebean

J
just Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren

Vielen Dank für alle Antworten.
Natürlich kann ich den Pfad im Request abfangen und entsprechend reagieren. Allerdings fehlt mir da die Eleganz - ich müsste dann bei jeder Aktion, welche ohne Authenticaion laufen soll, meinen Code im Middleware anpassen und das finde ich nicht so toll. Die Variante mit app.UseWhen(...) finde ich auch aus dem selben Grund nicht praktisch.
Früher (bei ASP .net) hatte man den HttpAuthenticationContext zur Verfügung was es ermöglichte die Attributen von den Aktionen herauszulesen. Gibt es wirklich keinen Weg mehr dafür?