13

Korzystamy z grantu nazwa użytkownika-hasło, aby uzyskać token dostępu z naszego serwera uwierzytelniania. Chcemy odświeżyć token dostępu przed jego wygaśnięciem za pomocą dostarczonego tokena odświeżania, dopóki użytkownik nie wyloguje się lub nie zamknie aplikacji klienckiej.Żądanie nowego tokena dostępu za pomocą odświeżania tokena w przydzieleniu nazwy użytkownika i hasła w Spring Security OAuth2

Jednak nie mogę znaleźć żadnych przykładów tego, jak wydać ten odświeżania tokenu żądania ..

Aby otrzymać token nazywamy coś takiego:

curl -v --data "grant_type=password&username=user&password=pass&client_id=my_client" http://localhost:8080/oauth/token 

więc odświeżyć będę oczekiwać na wezwanie aby wyglądać następująco:

curl -v --data "grant_type=refresh_token&access_token=THE_ACCESS_TOKEN&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

czy może

curl -v -H "Authorization: Bearer THE_ACCESS_TOKEN" --data "grant_type=refresh_token&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

Ale da mi tylko 401 ..

O tak, może muszę dodać identyfikatorklienta? Nie mogę użyć tajnego klienta, ponieważ go nie ma (patrz powyższy wniosek o uzyskanie tokena). Uwierzytelnianie odbywa się za pomocą nazwy użytkownika i hasła.

Myślę, że mamy właściwą konfigurację serwera, więc nie będę go tutaj publikować. Jeśli jedno z moich przykładowych zgłoszeń powinno zadziałać i musisz zobaczyć ważne części konfiguracyjne, dodam je.

Dzięki!

Odpowiedz

24

tak powiedziałem, nie używamy tajemnicy klienta, ponieważ nie możemy mieć, że kręci w aplikacji klienckiej Javascript. I nie jest to konieczne, gdy używasz przyznania nazwy użytkownika-hasła. (Zobacz sposób, w jaki żądamy tokenu dostępu). Rzeczywiście byłem blisko do roztworu i w końcu zorientowaliśmy się:

curl -v --data "grant_type=refresh_token&client_id=THE_CLIENT_ID&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

więc nie ma potrzeby dostępu tokena lub tajemnicy klienta.

Ponad wszystko jest wystarczająco bezpieczne.

  • Nie przechowujemy żadnych tajnych informacji po stronie aplikacji klienckiej.
  • Użytkownicy zawsze potrzebują hasła do zalogowania się i widzą tylko swoje zasoby.
  • Ograniczamy ważność tokena odświeżania do realistycznego czasu, takiego jak dzień roboczy lub coś takiego, aby nawet jeśli zostało naruszone, okno dla atakującego jest ograniczone, a jednocześnie pozwala użytkownikowi wygodnie pozostawać w kontakcie z serwerem zasobów przez długi czas. sesja.
+0

Nie wiem, dlaczego w ogóle potrzebujesz tutaj tokena odświeżającego. Token dostępu z ograniczoną ważnością zachowuje się dokładnie tak samo z prostszym przepływem pracy. Czy czegoś brakuje? – long

+0

@ Jeśli nie wygaśnie Twój token dostępu, a użytkownik jest wciąż zalogowany. W tym przypadku musisz zdobyć nowy token dostępu, a do tego używamy tokena odświeżania –

6

Dla hasła grant_type wymagane są clientId i clientSecret. Byłaś blisko z trzecią próbą, ale przekazałeś kodowany przez Base64 identyfikator clientId i clientSecret zamiast tokenu dostępu w nagłówku Authorization. To jest właściwa odświeżania tokenu żądania:

curl -H "Authorization: Bearer [base64encode(clientId:clientSecret)]" "https://yourdomain.com/oauth/token?grant_type=refresh_token&refresh_token=[yourRefreshToken]" 

Dla dobrego odniesienia, to sprawdzić: http://techblog.hybris.com/2012/06/11/oauth2-resource-owner-password-flow/

+0

Witaj @Kubgfuters, mam mały problem z moją konfiguracją. Po pierwsze, kiedy wyślę żądanie dostępu do tokena, odpowiedź wygeneruje sukces z tokena.Ale gdy próbuję uzyskać dostęp do zasobu, jeśli zamiast znacznika wysyłam 64-kodową nazwę użytkownika/hasło, zasób będzie z powodzeniem uzyskiwany zamiast trafiania tokena. to jest adres mojej konfigencji https://github.com/harmeetsingh0013/dummy_project/blob/master/dummy-project-configuration/src/main/java/com/harmeetsingh13/config/Oauth2SpringSecurityConfig.java –

+0

Zakładam, że jesteś mówiąc o ograniczeniu bezpieczeństwa Spring, a nie OAuth2 w ogóle. W każdym razie dla wyjaśnienia, nie jest wymagane dla OAuth2: https://tools.ietf.org/html/rfc6749#section-4.3.2 –

Powiązane problemy