Mam projekt ASP.NET MVC 4 za pomocą interfejsu API WWW. Na kontrolerze ustawiłem klasę wymagającą autoryzacji za pomocą atrybutu [Autoryzuj]. Do uwierzytelniania używam dostawcy członkostwa ASP.NET i mam ustawiony zestaw Web.Config do używania uwierzytelniania "Formularze". Tutaj utknąłem:ASP.NET MVC 4 Web API Authentication z dostawcą członkostwa
Wszystko działa dobrze, aż do momentu, w którym skończyłem testowanie interfejsu API i chcę zabezpieczyć kontroler za pomocą atrybutu [Authorize], aby móc rozpocząć testowanie uwierzytelniania dla użytkowników w moim Dostawca członkostwa. Więc odpalić Skrzypek i dokonać takiego samego połączenia dodając pozwolenia: Podstawowe atrybutu wraz z Nazwa użytkownika: Hasło od mojego dostawcy członkostwa tak:
odpowiedzi otrzymuję jest 401 nieuprawnione i pod „Auth” Otrzymuję "Brak nagłówka uwierzytelniania WWW". Wtedy zdaję sobie sprawę, że API szuka klucza kodowanego SHA1. Więc odpalić generator SHA1 z wyszukiwania i uzyskać hash dla mojego Nazwa użytkownika: Hasło i zaktualizować nagłówka żądania tak:
To nie działa albo i uzyskać takie same wyniki. Poza tym oczywiście potrzebuję jakiegoś "wspólnego sekretnego klucza", aby użyć go do odszyfrowania mojej nazwy użytkownika/hasła.
więc moje pytania:
- Jak mogę dostać ten klucz z serwera (lub w tym przypadku wirtualnego IIS zjechania VS 2012).
- Jak używać tego do wykonywania uwierzytelnionych wywołań w Skrzypek przy użyciu nazw użytkowników/haseł od dostawcy członkostwa ASP.NET.
- Jak korzystać z tego w mojej aplikacji klienckiej, aby wykonać te same wywołania (aplikacja C# WPF).
- Czy jest to najlepsze rozwiązanie w połączeniu z protokołem SSL podczas wywołań HTTP? Jeśli nie, to co jest?
Z góry dziękuję!
Dzięki Darin, to jest dokładnie to, co potrzebne! – CodeAbundance
'User.Identity.Name' w metodzie sterownika jest dla mnie pusta,' User.Identity.IsAuthenticated' to "false". W debugerze widzę, że 'Thread.CurrentPrincipal' jest ustawiony na nazwę użytkownika z poprawną nazwą użytkownika i rolami w procedurze obsługi komunikatów. Również '[Authorization (Roles = ...)] 'atrybut jest respektowany: Jeśli użyję użytkownika z niewłaściwymi rolami, otrzymam nieautoryzowaną odpowiedź i nie osiągnę metody kontrolera. Ale 'User.Identity' nie ma wartości, którą ustawiłem w module obsługi komunikatów. Czy masz pojęcie, co może być nie tak? – Slauma
@Slauma, nie mogę tego odtworzyć. Może mógłbyś zacząć nowy wątek wyjaśniający krok po kroku, jak odtworzyć problem (zaczynając od pustego projektu oczywiście). –