Clicky

Skocz do zawartości


Zdjęcie
* * * * * 1 głosy

Angular JS pytań kilka

9 odpowiedzi w tym temacie
angularjs

  • Zaloguj się, aby dodać odpowiedź

#1 Zepco

Zepco

    Senior Mastah

  • Moderator
  • 1583 postów
  • Skąd:Kielce

Napisano 22 grudzień 2013 - 21:21

Po frameworkach PHP przyszedł czas na FW pisane w JS i mój wybór padł na Angulara.

Na początek chciałbym zrobić coś na wzór listonica, czyli lista zakupów, która byłaby dostosowana do moich potrzeb. Dzięki temu będę mógł poznać bliżej angulara i jako backendu użyć laravela do api z którym będzie się łączył.

Ale jak to zwykle bywa na starcie mam trochę pytań odnośnie pewnych rzeczy, i oto one na początek:

1. W jaki sposób zabezpieczać podstrony, czy robić to przy każdym przeładowaniu, czy też tutaj nic nie robić i sprawdzać to co zwraca zapytanie do serwera. Jeśli jest błąd 401 to wtedy działać. Czy sprawdzać i tu i tu.

2. W kwestii autoryzacji wiem jak zrobić logowanie, jest osobna podstrona, do niej kontroler. Ale czy do wylogowania jak mam opcję w menu, które jest ładowane do każdej podstrony, to mam stworzyć osobny kontroler np. NavCtrl i w nim obsłużyć tę akcję?

Zarówno logowanie jak i wylogowanie obsługiwane jest przez serwis Auth.

3. Czy jest możliwość automatycznego ładowania kontrolerów, coś na wzór autoloadera w PHP?


OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --


#2 airborn

airborn

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 142 postów

Napisano 24 grudzień 2013 - 00:47

Hej, aplikacja którą chcesz robić nie wydaje się zbytnio skomplikowana. Może spróbuj zmienić trochę koncepcję i zamiast rozważać jak zabezpieczać podstrony zbuduj aplikację SPA (jednostronną).

 

Od strony backendu najlepiej by taka aplikacja była czysto RESTowa. Masz wówczas od razu autoryzację w każdym żądaniu (pamiętaj, że REST jest bezstanowy) oraz możesz skorzystać bezproblemowo z angularowego ngResource.



#3 dczepierga

dczepierga

    Początkujący

  • Użytkownik
  • Pip
  • 27 postów
  • Skąd:Katowice

Napisano 24 grudzień 2013 - 09:28

Cześć

 

Jeżeli chodzi o samego Angulara to przede wszystkim polecam zapoznać się ze stronką http://todomvc.com/, gdzie znajdziesz implementacje prostej aplikacji TODO w różnych językach i w tym również AngularJS.

Jeżeli chodzi o sam backend pod Angulara to najlepiej oprzeć się o REST - ja osobiście wolę do tych zastosowań ZF2, ale to już wedle uznania :) Angulara da sie dopasować praktycznie do wszystkiego ;)

 

A teraz kilka odpowiedzi/podpowiedzi na nurtujące cię pytania:

 

1) Jeżeli chodzi o sprawdzanie uprawnień to AngularJS nie ma jakichkolwiek modułów do takich zabaw... Na starcie możesz się zabawić na podstawie odpowiedzi z serwera i interpretowaniem wszystkich odpowiedzi z zapytań $http i w przypadku jakiegokolwiek błędu przekierowanie usera do strony logowania.

W bardziej zaawansowanych zastosowaniach trzeba dopisać moduł który może sprawdzać uprawnienia per $route i tak naprawdę zatrzymywać jego wykonanie gdy ktoś posiada za mało uprawnień.

 

2) Jeżeli chodzi o autoryzację użytkownika to również jest to temat rzeka :) Ja osobiście używam rozwiązania w którym przy logowaniu użytkownika, user utrzymuje token który wysyłany jest przy każdym requeście do serwera i na tej podstawie weryfikuję jego uprawnienia + do tego zapamiętywanie zalogowanego usera przez cookie gdzie zapisuje się taki klucz a przy starcie aplikacji się go inicjuje (jest sporo problemów do rozwiązania głównie z uprawnieniami na starcie ale wszystko da się zaimplementować odpowiednio).

Samo wylogowanie możesz dorzucić tak naprawdę do dowolnego kontrolera (nawet tego którego używasz do navbara) i w nim obsłużyć wysłanie requesta o zniszczenie sesji i przekierować od razu usera do strony startowej/logowania :)

 

3) Jest możliwość robienia lazy loadingu, ale wymaga to użycia np. RequireJS.

Natywnie AngularJS nie ma jako takiego lazy loadingu zaimplementowanego, możesz jedynie użyć angular-loadera (jest w modułach) który pozwala na ładowanie plików w dowolnej kolejności, a sam Angular tak naprawdę inicjuje dany kontroler tylko wtedy kiedy go potrzebuje - więc tak naprawdę ma jedynie inicjowanie wszystkich komponentów on demand.

Z tego co wiem to team Angulara pracuje nad daniem wsparcia dla typowego AMD i być może wybór trafi na RequireJS, ale na to trzeba poczekać na pewno jeszcze kilka wersji :)

Aktualnie pozostaje ci się zadowolić RequireJS, ale wymaga to trochę nakładu pracy i przeskoczenia dość trochę ilości problemów za tym idących podczas implementacji czegokolwiek w AngularJS - ale jest to możliwe bo sam używam takiego rozwiązania na co dzień :)

 

Jeżeli miałbyś jeszcze jakieś pytania to najwyżej pisz, postaram się na nie odpowiedzieć jak najlepiej :)


  • nrm, sbl i Piotr Lewandowski lubią to

#4 Zepco

Zepco

    Senior Mastah

  • Moderator
  • 1583 postów
  • Skąd:Kielce

Napisano 26 grudzień 2013 - 23:28

To jeszcze pytanie odnośnie tego logowania. Rozumiem, że po stronie serwera nie tworzę żadnej sesji tylko klient przechowuje podany token i w razie wylogowania go niszczy i już?


OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --


#5 airborn

airborn

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 142 postów

Napisano 27 grudzień 2013 - 13:14

Jeżeli chcesz być zgodny z RESTem to tak. Połączenie powinno być bezstanowe. Odpowiedź powinna zależeć tylko od tego co zostało przekazane w zapytaniu (URL, body, nagłówki), tak aby każdy klient na takie samo żądanie dostał taką samą odpowiedź (a nie w zależności od jakiejś istniejącej lub nie sesji). Dlatego uwierzytelnianie powinno być robione po stronie serwera przy każdym żądaniu.



#6 Zepco

Zepco

    Senior Mastah

  • Moderator
  • 1583 postów
  • Skąd:Kielce

Napisano 30 grudzień 2013 - 17:20

Z bezstanowością nie jest tak łatwo jak sądziłem. Przekopałem sporo zasobów w necie i natrafiłem na dwa rozwiązania HMAC i OAuth(2).

Korzystacie z któregoś z nich czy jeszcze z czegoś innego?


OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --


#7 airborn

airborn

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 142 postów

Napisano 31 grudzień 2013 - 16:50

HMAC zawsze mi się bardzo kojarzy z OAuth(1). OAuth2 to już tak szeroka specyfikacja, że ciężko konkretnie odpowiedzieć na to pytanie. W przypadku OAuth2 najpopularniejszym rozwiązaniem wydaje się bearer token (i dość łatwym z implementacji). Ew. spotkałem się też z API które korzystają wyłącznie z HTTP Basic Auth, ale tutaj tylko przy pełnej współpracy z SSL.



#8 dczepierga

dczepierga

    Początkujący

  • Użytkownik
  • Pip
  • 27 postów
  • Skąd:Katowice

Napisano 02 styczeń 2014 - 12:27

Ja osobiście korzystam z całkowicie własnej implementacji podobnej do OAuth.

 

Przy pierwszym logowaniu AngularJS otrzymuje AuthKey, który później przy każdym requeście z Angulara wysyłany jest w headerze lub doklejany do URL-a (w zależności od serwera na którym stoi backend, bo niestety nie każda konfiguracja pozwala czytać headery) i na tej podstawie użytkownik jest weryfikowany wraz z uprawnieniami - gdy coś jest nie tak lub sesja wygasła zwracany jest odpowiedni status HTTP który łapie AngularJS i wykonuje odpowiednie akcje.

 

Wylogowanie to naturalnie usunięcie AuthKey po stronie Angulara i wysłanie requesta do backendu o zniszczenie sesji.

 

Łatwiej już chyba się nie da tego ogarnąć :)



#9 Zepco

Zepco

    Senior Mastah

  • Moderator
  • 1583 postów
  • Skąd:Kielce

Napisano 02 styczeń 2014 - 19:07

Tylko że sesja w przypadku RESTful odpada, bo jest bezstanowy. I teraz pojawia się pytanie na ile rozwiązanie z authkey jest bezpieczne bez SSL? Bo przecież jeśli ktoś przechwyci klucz, to teoretycznie ma dostęp do danych, prawda? HMAC natomiast mimo udostępniania klucza publicznego, który identyfikuje użytkownika posiada klucz prywatny zabezpieczający możliwość wysłania obcego żądania.


OŚWIADCZENIE: Ja, niżej podpisany, świadomy wszystkich konsekwencji tego posta postanawiam go dopuścić do użytku publicznego, albowiem bo gdyż aczkolwiek uważam, że nie wyrządzi on (znaczy: post) krzywdy nikomu innemu niźli mnie samemu (czyli autorowi posta).
-- Zepco --


#10 PrzemB

PrzemB

    Początkujący

  • Użytkownik
  • Pip
  • 5 postów

Napisano 17 listopad 2015 - 10:11

Tylko że sesja w przypadku RESTful odpada, bo jest bezstanowy. I teraz pojawia się pytanie na ile rozwiązanie z authkey jest bezpieczne bez SSL? Bo przecież jeśli ktoś przechwyci klucz, to teoretycznie ma dostęp do danych, prawda? HMAC natomiast mimo udostępniania klucza publicznego, który identyfikuje użytkownika posiada klucz prywatny zabezpieczający możliwość wysłania obcego żądania.

 

Tworząc token zapisuje w nim dla kogo jest on przeznaczony (IP odbiorcy). Następnie przy każdym żądaniu sprawdzana jest zgodność informacji podanej w tokenie, z aktualnym adresem IP.

 

Żeby być zgodnym ze specyfikacją, adres IP umieszczam pod polem "aud" (Audience):

https://tools.ietf.o...9#section-4.1.3







Również z jednym lub większą ilością słów kluczowych: angularjs

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych