Closed waldek18 closed 8 years ago
1. Brakuje metody odbierającej dane z aplikacji mobilnej
Zastanawiam się czy warto teraz implementować autentykację, czy lepiej skupić się na funkcjonalności, czyli przesyłaniu danych na serwer.
Ma to sens gdy mamy powiązanie loginu czy id urządzenia z protokołem przesłanym. Nie uwzględniliśmy tego wogóle w schemacie bazy.
hash hasła z bazy jest równy hashowi hashła przesłanego przez użytkownika - hasło będzie zakodowane ? czyli metoda compareTo .
Tak Arrays.equals pytanie czy na początek w ogóle kodujemy hasła, czy robimy wyłącznie transfer danych ?
W dniu 13 listopada 2015 23:14 użytkownik waldek18 <notifications@github.com
napisał:
hash hasła z bazy jest równy hashowi hashła przesłanego przez użytkownika
- hasło będzie zakodowane ? czyli metoda compareTo .
— Reply to this email directly or view it on GitHub https://github.com/openpkw/openpkw-weryfikator/pull/11#issuecomment-156574023 .
Ja uwazam ze powinnismy kodowac wraz z haslami. To praktycznie zadne obciazenie a i tak odlozylismy prace nad crypto. Nie ma co odwlekacz wszystkiego na pozniej.
Mała uwaga do kodu. Zamiast zwracać token z zawartością "ERROR" w przypadku błędu, lepiej użyć bardziej rest'owego sposobu. Zadeklarować typ zwracany z metody jako:
ResponseEntity<Token>
A następnie zwracać w przypadku sukcesu:
return new ResponseEntity<>(token, HttpStatus.OK);
Zaś w przypadku błędu np. FORBIDDEN:
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
Dobrze by było dodać też jakieś testy.
Ok zaimplementowałem to rozwiązanie do apki mobilnej przetestowałem i wszystko działa
W dniu 14 listopada 2015 08:35 użytkownik Sebastian Pogorzelski < notifications@github.com> napisał:
Mała uwaga do kodu. Zamiast zwracać token z zawartością "ERROR" w przypadku błędu, lepiej użyć bardziej rest'owego sposobu. Zadeklarować typ zwracany z metody jako:
ResponseEntity
A następnie zwracać w przypadku sukcesu:
return new ResponseEntity<>(token, HttpStatus.OK);
Zaś w przypadku błędu np. FORBIDDEN:
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
— Reply to this email directly or view it on GitHub https://github.com/openpkw/openpkw-weryfikator/pull/11#issuecomment-156662677 .
Tak mi przyszla jeszcze inna rzecz do glowy. Musimy sobie ustalic jakas metodologie budowania ogolnie restow (w senie urle i parametry). Czyli jak przekazujemy id. Jak interpretujemy co jest POST co jest PUT. By kazdy trzymal sie przy nowych restach tych ustalen. Bo tutaj widze ze wiekszosc idzie w @QueryParam ale rownie dobrze uzywac @PathVariable czy wrzucac w POST. Mysle ze to czas ustalic jaka metodologie uzyjemy lub oprzeć się na znanych wzorcach w tym temacie.
Przerzuciłem kod z tego brancha do repozytorium openpkw/openpkw-weryfikator do brancha 'waldek', żeby łatwiej było nad nim pracować.
Hmm, nie jestem przekonany, że kod w tej wersji jest dobrym kandydatem do zmergowania do mastera.
Zastanawia mnie przykładowo ten fragment:
public String register(@RequestBody UserRegister userRegister) {
User user = userRepository.findByEmailAddress("fdsaf");
System.out.println("L:" + userRegister + ", user:" + user);
if (userRegister == null || userRegister.isEmpty()) {
return "ERROR";
}
(...) }
Patrzylem na ta czesc kodu co trzeba by poprawic:
Wziąłem to na warsztat i zaraz wrzucę wersję, która ma parę rzeczy poprawionych. Np. zwracanie błędów przy pomocy kodów http itd.
No i od razu parę testów akceptacyjnych wrzucę.
Tutaj będę wrzucać moje zmiany: https://github.com/openpkw/openpkw-weryfikator/tree/waldek
Jest jeszcze jedna rzecz, której nie rozumiem. Piszę testy dla metody login i nie bardzo wiem jak ona ma działać. Przesyłane są następujące dane:
Które pola są wymagane? Na podstawie których ma być wykonywana autentykacja? Email i hasło? Co to jest client public key?
Sorry za zalew pytań, ale mam jeszcze jedno. Z kodu wynika, że kiedy się woła metodę /login i adres e-mail użytkownika nie został znaleziony w bazie danych, to użytkownik zostanie utworzony automatycznie. Czy taki był zamysł? Jeśli tak, to do czego służy metoda /register?
Z tego co rozmawiałem z Waldkiem to autentykacja miała się odbywać na podstawie adres email i hasło, ponieważ loginu nie ma w tabeli User. Clint public key to klucz publiczny klienta RSA, który ma być wykorzystany do zaszyfrowania tokenu- klucza sesji. Metoda register miała służyć do rejestracji nowych użytkowników wyłącznie.
W dniu 1 grudnia 2015 09:01 użytkownik Sebastian Celejewski < notifications@github.com> napisał:
Sorry za zalew pytań, ale mam jeszcze jedno. Z kodu wynika, że kiedy się woła metodę /login i adres e-mail użytkownika nie został znaleziony w bazie danych, to użytkownik zostanie utworzony automatycznie. Czy taki był zamysł? Jeśli tak, to do czego służy metoda /register?
— Reply to this email directly or view it on GitHub https://github.com/openpkw/openpkw-weryfikator/pull/11#issuecomment-160888394 .
No a ta obsługa błędów w postaci statusów http ? No i czemu zwracany jest string z metody ? Nie lepiej było to opakować w jakiegoś jsona ?
To pytanie do Waldka obydwie metody miały zwracać jsona. Moim zdaniem w metodzie login w przypadku niepoprawnego adresu email lub hasła należy wykorzystać bardziej RESTowe rozwiązanie i zwrócić kod błędu np. 401 lub 403.
W dniu 1 grudnia 2015 10:21 użytkownik Mrozi notifications@github.com napisał:
No a ta obsługa błędów w postaci statusów http ? No i czemu zwracany jest string z metody ? Nie lepiej było to opakować w jakiegoś jsona ?
— Reply to this email directly or view it on GitHub https://github.com/openpkw/openpkw-weryfikator/pull/11#issuecomment-160905122 .
W implementacji, nad którą pracuję, obie metody zwracają kody HTTP jako kody błędu, a także zwracają JSONa zawierającego szczegółowy kod błędu i message. Metoda login zwraca token równiez w JSONie.
W jaki sposób mógłbym przetestować ten kod? Czy wymagane jest utworzenie bazy danych?