/ / IdentityServer3 Authentication z Nancy - nancy, identityserver3

IdentityServer3 Authentication z Nancy - nancy, identityserver3

Jak wykonać uwierzytelnianie IdentityServer3 w Nancy?

Jest uwierzytelnianie OpenID z Nancy, istnieje uwierzytelnianie Active Directory z Nancy. Łatwe uwierzytelnianie formularzy za pomocą Nancy. Jak mogę uwierzytelniać i autoryzować IdentityServer3 w Nancy?

  • Czy istnieje krótki i łatwy sposób na zrobienie tego?
  • Czy muszę tworzyć rzeczy IUserMapper?
  • Czy powinienem używać uwierzytelniania Nuget for Forms (dla moich widoków UI)?
  • Czy powinienem używać uwierzytelniania tokenowego Nancy?
  • Czy istnieje różnica, czy jestem uwierzytelniająca (iautoryzacja) dla widoku interfejsu użytkownika lub dla wywołania RESTFull API? (tj. czy muszę wybierać między "niejawnym przepływem" / "przepływem kodu" / "przepływem hybrydowym" lub czy mogę po prostu pracować z przepływem kodu?)
  • Czy to będzie miało wpływ na to, jaki rodzaj sklepu rozpoznaje IdentityServer3?
  • Czy muszę ustawić coś specjalnego na IDSrv3 (jak definicja klienta)? A może / powinno to być zrobione w pliku konfiguracyjnym IDSrv3?

Chcę ustawić ekran logowania, aby przejść do IDSrv3, a następnie wrócić z tokenem i roszczeniami (rolami).

Odpowiedzi:

0 dla odpowiedzi № 1

OK, myślę, że rozumiem poprawnie: (proszę zauważyć zmiany na końcu tego posta)

  1. Tylko interfejs API Jeśli tylko obsługujesz interfejsy API (bez interaktywnegowidoki), tzn. jeśli nie obsługujesz interfejsu użytkownika, to będziesz wchodził w interakcje z OP (Dostawca OpenID-Connect, w tym przypadku serwer IdentityServer3), tylko PO zalogowaniu się przez OP z innego projektu (z SSO - Single Sign On) i tylko po tym, jak aplikacja otrzyma token dostępu w zamian za PO. Będziesz używać oprogramowania pośredniego BearerTokenAuthentication do uwierzytelniania tokenu dostępu.

IdentityServer3 musi oczekiwać na twoje połączenie, więc musisz być zarejestrowany jako klient.

1.1 Bez zasobów: Jeśli autoryzujesz tylko interfejsy API (zazwyczajwedług roli) wszystko, co musisz zrobić, to udekorować za pomocą [Authorize (Roles = "role1, role2")]. Podczas wywoływania API (z https !!) dodajesz TokenBearer i wszystko dzieje się automatycznie.

1.2 Dzięki zasobom: Jeśli udostępniasz zasoby zgodnie zzgody użytkownika i roszczeń (zazwyczaj ponownie zgodnie z rolami użytkownika), należy użyć AuthorizationManager zgodnie z zaleceniami w dokumentacji krokowej MVC i API IdentityServer.

  1. Interfejs użytkownika: Jeśli używasz interfejsu, który potrzebujezaloguj się, musisz dodać uwierzytelnianie plików cookie (Nuget), a następnie otworzyć uwierzytelnianie połączenia id (wykonaj przykład MVC, Nuget IdentityServer3.OpenIdConnect Authentication).
    Spowoduje to uruchomienie aplikacji z "przepływ hybrydowy" aby twoje pierwsze połączenie przywróciło id_tokeni access_token. Przechowujesz oba żetony w pliku cookie (za pomocą powiadomień). Następnie użytkownik korzysta z id_token podczas wylogowywania, w przeciwnym razie przeglądarka zezwala na "ponowne odtworzenie".

Używasz tokenu access_token do wywoływania twoich interfejsów API (w taki sam sposób jak poprzednio), a oni z kolei zwracają zakresy i roszczenia.

  1. Uwierzytelnianie poświadczeń klienta Trzecia opcja dotyczy bezobsługowego (bez logowania użytkownika)automatyczne połączenia sieciowe. W takim przypadku należy zalogować się do IDServ3 za pomocą "Poświadczeń klienta", ustawiając "sekret" w IDServ3 i używając tego tajnego klucza wraz z "nazwą klienta" podczas wywoływania IDServ3, aby uzyskać listę "zakresów" z "roszczeniami", z którymi Twój interfejs API może zdecydować o autoryzacji lub odmowie dostępu.

Edytowano:

Okazuje się, że jest kilka dodatkowych kroków, aby API mógł uruchomić Authorize [Role = "role1, role2"].

Aby autoryzować do pracy w MVC, musisz alboutworzyć niestandardową klasę MojaAutoryzacjaAttribute: AuthorizeAttribute, sprawdzając roszczenia typu "rola", lub musisz zmienić kod serwera tożsamości, aby zwrócić obiekt ClaimTypes.Role w roszczeniach roli użytkownika i mieć zakres o ScopeType = ID zawierający elementy ClaimTypes .Role ról. Klient musi zezwolić na ten nowy zakres.

Następnie musisz poprosić o ten zakres w klasie uruchamiania MVC i NIE mieć linii transformacji roszczeń zmieniającej roszczenia w zestaw słowników prostego łańcucha.

Teraz autoryzacja API do pracy jest jeszcze trudniejsza:

Żądanie typu odpowiedzi "id_token" w plikuWywołanie ui da access_token bez ról w roszczeniach. Wynika to z tego, że do elementu access_token dołączony jest tylko zakres o typie ScopeType = Resource. Więc:

  • potrzebujesz INNEGO zakresu z ScopeType = Zasoby z rolami,
  • a klient w idsrv3 musi zezwolić na podanie tego zakresu,
  • i musisz poprosić o ten zakres w kodzie startowym projektu API wraz z kodem startowym token-okaziciel.
  • Na koniec, ponieważ jego zakres jest typu zasobu, autoryzacja będzie działać, ale Role = ... nie będą, chyba że utworzysz własną klasę MyAuthorizeAttribute: AuthorizeAttribute, która sprawdza rolę.