Ten temat był dla mnie niesamowicie zagmatwany. Jestem nowicjuszem w aplikacjach HTTP, ale muszę opracować klienta iPhone'a, który pobiera skądś dane JSON. Wybrałem Web API od MS, ponieważ wydawało się to łatwe, ale jeśli chodzi o uwierzytelnianie użytkowników, sprawy stają się dość frustrujące.
Jestem zdumiony, jak nie udało mi się znaleźć wyraźnego przykładu uwierzytelniania użytkownika od samego ekranu logowania do użycia Authorize
atrybutu w moich ApiController
metodach po kilku godzinach Google.
To nie jest pytanie, ale prośba o przykład, jak dokładnie to zrobić. Spojrzałem na następujące strony:
- Zapewnienie bezpieczeństwa interfejsu API sieci Web ASP.NET
- Podstawowe uwierzytelnianie za pomocą interfejsu API sieci Web ASP.NET
Mimo że wyjaśniają, jak obsługiwać nieautoryzowane żądania, nie pokazują wyraźnie czegoś takiego jak a LoginController
lub czegoś podobnego, aby poprosić o poświadczenia użytkownika i zweryfikować je.
Czy ktoś chce napisać miły prosty przykład lub wskazać mi właściwy kierunek?
Dzięki.
źródło
Odpowiedzi:
To dlatego, że mylisz się co do tych dwóch pojęć:
Uwierzytelnianie to mechanizm, za pomocą którego systemy mogą bezpiecznie identyfikować swoich użytkowników. Systemy uwierzytelniania odpowiadają na pytania:
Autoryzacja to mechanizm, za pomocą którego system określa, jaki poziom dostępu powinien mieć dany uwierzytelniony użytkownik do zabezpieczonych zasobów kontrolowanych przez system. Na przykład system zarządzania bazą danych może być zaprojektowany w taki sposób, aby zapewnić określonym określonym osobom możliwość pobierania informacji z bazy danych, ale nie możliwość zmiany danych przechowywanych w bazie danych, dając jednocześnie innym osobom możliwość zmiany danych. Systemy autoryzacji udzielają odpowiedzi na pytania:
Authorize
Atrybut w MVC służy do zastosowania reguł dostępu, na przykład:Powyższa reguła zezwala na dostęp do metody tylko użytkownikom w rolach administratora i superużytkownika
Reguły te można również ustawić w pliku web.config za pomocą
location
elementu. Przykład:Jednak zanim te reguły autoryzacji zostaną wykonane, musisz zostać uwierzytelniony w bieżącej witrynie internetowej .
Stąd możemy podzielić problem na dwie części:
Uwierzytelnij użytkowników podczas korzystania z usług interfejsu API sieci Web w tej samej aplikacji sieci Web
Byłoby to najprostsze podejście, ponieważ polegałoby na uwierzytelnianiu w ASP.Net
Oto prosty przykład:
Web.config
Użytkownicy zostaną przekierowani do konta / trasy logowania , gdzie wyrenderujesz niestandardowe kontrolki, aby poprosić o poświadczenia użytkownika, a następnie ustawisz plik cookie uwierzytelniania za pomocą:
Uwierzytelnianie międzyplatformowe
Taki przypadek miałby miejsce, gdy udostępniasz tylko usługi interfejsu API sieci Web w aplikacji sieci Web, w związku z czym inny klient korzystałby z usług, klientem mogłaby być inna aplikacja internetowa lub dowolna aplikacja .Net (formularze Win, WPF, konsola, usługa systemu Windows, itp)
Na przykład załóżmy, że będziesz korzystać z usługi interfejsu API sieci Web z innej aplikacji internetowej w tej samej domenie sieciowej (w obrębie intranetu), w tym przypadku możesz polegać na uwierzytelnianiu systemu Windows zapewnianym przez ASP.Net.
Jeśli Twoje usługi są ujawniane w Internecie, musisz przekazać uwierzytelnione tokeny do każdej usługi interfejsu API sieci Web.
Więcej informacji znajdziesz w następujących artykułach:
http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/
http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
źródło
Jeśli chcesz, aby uwierzytelnić przed nazwą użytkownika i hasłem oraz bez ciasteczka autoryzacji The MVC4 Autoryzuj atrybut nie będzie działać po wyjęciu z pudełka. Możesz jednak dodać następującą metodę pomocnika do kontrolera, aby akceptować nagłówki podstawowego uwierzytelniania. Wywołaj to od początku metod swojego kontrolera.
Po stronie klienta ten pomocnik tworzy
HttpClient
z umieszczonym nagłówkiem uwierzytelniania:źródło
Pracuję nad projektem MVC5 / Web API i potrzebuję możliwości uzyskania autoryzacji dla metod Web Api. Kiedy mój widok indeksu jest ładowany po raz pierwszy, wywołuję metodę Web API „token”, która, jak sądzę, jest tworzona automatycznie.
Kod po stronie klienta (CoffeeScript) do pobrania tokena to:
Jeśli się powiedzie, zostanie wywołane następujące polecenie, które zapisuje token uwierzytelniania lokalnie:
Następnie, jeśli potrzebuję wywołać Ajax do metody interfejsu API sieci Web, która ma tag [Authorize], po prostu dodaję następujący nagłówek do mojego wywołania Ajax:
źródło
response.access_token
bierze. Czy ustawiasz go z kodu C # ..?