2013-07-15 18 views
5

Mam aplikację .Net MVC WebApi i próbuję napisać front-end wyłącznie w Angularjs. Jestem w stanie uzyskać dane przez json i manipulować nim, ale teraz muszę zabezpieczyć dane i dodałem uwierzytelnianie Base64 do nagłówków na serwerze. Kiedy przeglądam niektóre strony testowe widoku .net, otrzymuję odpowiednie okno logowania z prośbą o podanie hasła/użytkownika, aby móc kontynuować pracę z jsonem.AngularJs -.net MVC WebApi Authentication przykład

Nie wiem, jak to zrobić, przekazać te informacje (użytkownik/hasło) w nagłówkach ustawionych w kanale $ resource. Czy są jakieś pełne przykłady, które mogą lepiej pokazać mi, jak to zrobić? Wiem, że to dotyczy ciasteczek i używania tokena, który przekazuje serwer, ale nie wiem, jak złożyć kawałki razem.

Kiedy mam to wszystko razem, mam nadzieję, że opublikuję kompletny przykład szkieletu dla wszystkich warstw (DAL, RESTFUL, warstwa testowa konsoli).

Pytanie brzmi: w jaki sposób wstawić informacje uwierzytelniające do nagłówków na kliencie podczas korzystania z zasobów AngularJS $?

Dzięki

+0

Nie jestem naprawdę pewien, co to jest tutaj. Jak ustawić nagłówki od Angular? Lub ...? Co próbowałeś zrobić? –

+0

Zgadzam się z Blesh, pytanie jest bardzo szerokie. Ale użycie adnotacji [Uwierzytelnij] powinno Cię gdzieś zabrać, a także wydrukować token chroniący przed oszustwami. Phil Haack napisał o tym tutaj: http://haacked.com/archive/2011/10/10/preventing-csrf-with-ajax.aspx – marko

Odpowiedz

3

Jeśli umieścisz cookie w nagłówku na bocznych angularjs serwer wyśle ​​Plik ten cały czas .. U nie mają nic wspólnego.

Jeśli chcesz przekazać token w nagłówku nie w cxookie po stronie kątowej, po prostu wykonaj to: $httpProvider.defaults.headers.common['X-Auth'] = yourKey; w swoim bloku konfiguracyjnym.

Następnie, jeśli chcesz się dowiedzieć, czy użytkownik jest zalogowany, czy ma prawa, po prostu przechwytuje przechwytywacz. Jest to prosta fabryka, którą popchniesz w odpowiedziIntercetory zawsze w swoim bloku konfiguracyjnym.

Fabryka ta będzie słuchać każdą odpowiedź od serwera, a na jego realizację będzie sprawdzić kod statusu odpowiedzi w przypadku błędu:

401 -> nie zalogowany 403 -> nie zezwolić

przykład fabryki:

myModule.factory('myHttpInterceptor', function ($q) { 
    return function (promise) { 
     return promise.then(function (response) { 
      // do something on success    
      return response; 
     }, function (response) { 
      // do something on error 
      //check status 401 or 403 
      return $q.reject(response); 
     }); 
    }; 
}); 

Następnie umieścić swoją fabrykę w responseIntercetors http jak to w bloku con fig:

myModule.config(function ($httpProvider) { 
    $httpProvider.responseInterceptors.push('myHttpInterceptor'); 
}); 

Wystarczy pamiętać, rozwiązanie to jest przestarzałe w angularjs 1.1.4 (jeszcze niestabilny) ...

Fabryka ma być trochę inaczej odnoszą się jedynie do tego postu, aby uzyskać więcej informacji: AngularJS Intercept all $http JSON responses

Mam nadzieję, że pomaga