/ / Sekret klienta + odświeżanie tokena dostępu na wiosnę oauth2 - wiosna, wiosna-bezpieczeństwo, oauth-2.0, wiosna-oauth2

Sekret klienta + odświeżenie tokena dostępu wiosną oauth2 - wiosna, wiosna-bezpieczeństwo, oauth-2.0, wiosna-oauth2

Używam Spring Boot do backendu i urządzenia z Androidem do frontendu mojego systemu. W tej chwili stoję przed wyzwaniem użycia Spring-OAuth2 do zabezpieczenia mojego serwera zasobów.
Mam kilka pytań, które chcę z tobą omówić:
Moja wiedza + w tym samouczku mówią, że powinienem użyć typu przyznania „hasła” OAuth2.0 dla mojej aplikacji mobilnej, aby uzyskać token dostępu. Oficjalny wiosenny samouczek dotyczący bezpieczeństwa podaje przykład, jak uzyskać token dostępu za pomocą hasła typu grant:

$ curl client:secret@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=pwd

I oto moje pierwsze pytanie: Czy jest możliwość uzyskania tokena dostępu przy użyciu typu nadania hasła bez wysyłania „tajemnicy klienta”?
Ponieważ klucz klienta może być „odwrócony”engineered "poprzez dekompilację aplikacji klienckiej. Uzyskanie tokena dostępu bez tajemnicy powinno być w jakiś sposób możliwe, ponieważ Facebook SDK dla Androida również nie wymaga client_secret w aplikacji mobilnej.
Myślę, że mam tu mały problemzrozumienie, dlaczego clientID + clientSecret musi być zawarty w powyższym żądaniu, ponieważ skoro zawiera już nazwę użytkownika i hasło, powinno być możliwe wygenerowanie tokena dostępu, więc czy to zapewnia wyższy poziom bezpieczeństwa? i czy to implikuje następujący (przykład): Jestem zalogowany jako Filip w moim kliencie Android i wysyłam token dostępu A z każdym żądaniem do serwera. Następnie loguję się jako Filip do klienta WWW i próbuję uzyskać dostęp do serwera zasobów z klienta WWW za pomocą tokena dostępu A, co nie jest możliwe, ponieważ token dostępu A został wystawiony tylko dla klienta Android?

Następne pytanie to jak mogę odświeżyć otrzymany token dostępu?
Próbowałem to zrobić, używając poniższego polecenia,ale otrzymałem komunikat „Pełne uwierzytelnienie jest wymagane, aby uzyskać dostęp do tego zasobu”. Czy po otrzymaniu nowego odświeżonego tokenu mogę ponownie odświeżyć nowy token dostępu za pomocą tokena odświeżania?

curl -v --data "grant_type=refresh_token&client_id=acme&client_secret=acmesecret&refresh_token=REFRESH_TOKEN" http://localhost:9999/uaa/oauth/token

Dziękuję Ci

Odpowiedzi:

0 dla odpowiedzi № 1

OAuth 2.0 pozwala na tak zwanych klientów publicznych, tj. Klientów, którzy nie są uwierzytelniani. Możliwe jest więc użycie nadania poświadczeń hasła właściciela zasobu z klientem publicznym, tj. Takim, który nie musi wysyłać tajnego klucza klienta. że serwer autoryzacji nie może niczego założyć na temat klienta, ponieważ identyfikator_klienta nie jest sekretem i nie ma sposobu, aby uniemożliwić złośliwemu klientowi korzystającemu z tego typu grantu lub klientom podszywać się pod siebie nawzajem. Używanie go w ten sposób wiąże się więc z obniżeniem poziomu bezpieczeństwa, chociaż można argumentować, że w Twoim przypadku i tak nie ma możliwości korzystania z poufnych klientów, więc nie ma różnicy.

Ogólnie rzecz biorąc, przydział poświadczeń hasła właściciela zasobu jest anty-wzorcem dla protokołu OAuth i jest przeznaczony tylko do celów migracji, ponieważ pokonuje większość celów samego protokołu OAuth.

Tokeny dostępu są wydawane dla każdego klienta.

Odświeżenie żądania tokena wydaje się być OK, ale plikSerwer autoryzacji może wymagać podstawowego uwierzytelnienia zamiast podawania identyfikatora_klienta / tajemnicy_klienta jako parametrów post, biorąc pod uwagę, że to samo zostało zrobione dla pierwotnego żądania tokenu dostępu.