6

Próbuję znaleźć najlepszy sposób uruchomienia kodu po uwierzytelnieniu użytkownika za pomocą OpenID Connect w aplikacji MVC Dotnet Core. Nie chcę twardo kodować adresu URL przekierowania po zalogowaniu, ponieważ nadal muszą one kończyć się w miejscu, do którego próbują się dostać po uwierzytelnieniu. Po prostu muszę uruchomić kod np. "sprawdź, czy po raz pierwszy się zalogował i ustaw flagę" lub coś podobnego.Uruchom kod po zalogowaniu openID connect w Asp.net Core

Używałem środków średnich, ale ponieważ jest to wywoływane dla każdego żądania, powoduje to pewne problemy.

Czy ktoś ma jakieś pomysły, jak to osiągnąć?

+0

Jak ci poszło z tym? Mam dokładnie takie same wymagania, ale nie byłem w stanie wymyślić odpowiedniego rozwiązania jeszcze jon. Wysłałem podobne [pytanie] (https://stackoverflow.com/questions/45618386/how-to-redirect-after-azure-ad-authentication-to-different-controller-action-in) – OjM

+0

W jaki sposób rozwiązałeś problem? Mam dokładnie ten sam problem. – TejSoft

+0

Powinieneś mieć metodę, która generuje token APi ... po prostu wywołaj metodę tam, gdy proces uwierzytelniania jest zakończony i ma flagę w tabeli użytkowników, jak AccountNeverLoggedIn ... –

Odpowiedz

0

Uważam, że ten rodzaj selektywnego przekierowania należy przeprowadzić w ramach klasy dziedziczącej po AuthorizeAttribute; Można w nim wykonywać wiele czynności preambuły, w tym stosowanie dodatkowych kontekstów ról.

Jednym z przykładów jest przeczytanie i zaakceptowanie Warunków, które należy wykonać raz dla danych logowania (patrz Użytkownik). Można to wykonać przez przekierowanie do kontrolera MVC chronionego o niższej roli. Po zaakceptowaniu, rola "TandC_Consent" (lub jakakolwiek inna rola) może zostać zastosowana do użytkownika, a użytkownik może zostać przekierowany do kontrolera, który za każdym razem sprawdza poprawność za pomocą [AuthorizePermission("TandC_Consent")].

This github example pokazuje, jak zaimplementować instancję AuthorizeAttribute i dekorator [AuthorizePermission()].

0

Szukałem również, jak to zrobić i wreszcie użyłem IdentityServer3. Istnieje interfejs IUserService, który definiuje niektóre metody, które można przeciążać. Jedną z tych metod jest PostAuthenticateAsync Z dokumentacji IdentityServer3:

Ta metoda jest wywoływana, gdy użytkownik pomyślnie uwierzytelniony ale zanim zostaną one zwrócone do aplikacji klienckiej. Umożliwia to skonsolidowane miejsce w celu sprawdzenia niestandardowych przepływów pracy użytkownika po wszystkich innych metodach uwierzytelniania. Jest przeznaczony do przepływów pracy interfejsu użytkownika. Przekazano PostAuthenticationContext z tymi właściwościami: SignInMessage: Informacje kontekstowe przekazywane do autoryzowanego punktu końcowego. AuthenticateResult: Bieżący wiersz uwierzytelnienia. Usługa użytkownika może ponownie przypisać wartość inną niż null, aby zmienić wynik uwierzytelnienia.

Parametr context ma AuthenticateResult nieruchomości, które można ustawić w wyniku uwierzytelniania niestandardowe:

public override Task PostAuthenticateAsync(PostAuthenticationContext context) 
{ 
    // code that will determine target url 
    // redirectPath = ... 
    context.AuthenticateResult = AuthenticateResult(redirectPath, claims); 
} 

redirectPath musi zaczynać się od/lub ~ /”

Oto example z IUSerService realizacji.