• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Jak wykonać requesty do API chronionego OAuth2 (Spring)

Object Storage Arubacloud
+2 głosów
235 wizyt
pytanie zadane 5 lipca 2023 w Java przez Mikołaj Pątkowski Użytkownik (530 p.)
zamknięte 8 lipca 2023 przez Mikołaj Pątkowski
Korzystam ze Spring Boot 3 i Security 6. W mojej aplikacji działa zalogowanie się poprzez OAuth2. Teraz chcę wykonywać requesty do serwisu i dostawać z powrotem JSON. Problem jest w tym, że każdy request musi być autoryzowany przez access token.

W jaki sposób to zrobić? Muszę pobierać w jakiś sposób access token (może z obiektu Authorization) i dodawać go do każdego rest template, czy może jest jakieś lepsze rozwiązanie?

Pozdrawiam
komentarz zamknięcia: v

2 odpowiedzi

+2 głosów
odpowiedź 5 lipca 2023 przez Wiciorny Ekspert (270,230 p.)
wybrane 8 lipca 2023 przez Mikołaj Pątkowski
 
Najlepsza

No po to robisz autoryzacje, aby access token przydzielić i autoryzować użytkownika, więc wykonanie REQUESTU wymagające tokena jest niczym innym jak normalnym requrestem, z tym, że poprawna autoryzacja i identyfikacja klienta-  powoduje, że przydzielony jest mu token, który umożliwia dostęp. Ten token zwykle przesyłany jest w nagłówkach, nie jest trzymany na serwerze 

Nic nie musisz pobrać, bo tak naprawdę jeśli użytkownik jest autoryzowany, to ten token ma i on poleci w nagłówku.

Utworzyłeś jakąś klasę - tj. INTERCEPTOR, który będzie obsługiwał autoryzacje tokena  dla żądania? Np. poprzez automatyczne dodawanie access tokena do nagłówków? 
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/client/ClientHttpRequestInterceptor.html

Jeśli korzystasz z RestControlerów to możesz tez posiłkować się odbieraniem tego w RequestHeader 
https://docs.spring.io/spring-framework/reference/web/webflux/controller/ann-methods/requestheader.html
 

@GetMapping("/example")
    public String exampleRequest(@RequestHeader("Authorization") String authorizationHeader)

Ważne: 
- Twój frontend musi uzyskać token dostępu od serwera uwierzytelniającego,

- po stronie klienta token jest przchowywany zazwyczaj jest to przechowywane w pamięci podręcznej (np. w pamięci lokalnej lub w magazynie sesji
-  Przy wysyłaniu żądań z frontendu do backendu, token dostępu musi być dołączony jako nagłówek Authorization. Jest to zazwyczaj realizowane przez dodanie prefiksu "Bearer " przed tokenem dostępu i umieszczenie go w nagłówku Authorization.

+1 głos
odpowiedź 8 lipca 2023 przez Mikołaj Pątkowski Użytkownik (530 p.)

Dodałem Interceptor, który do każdego żądania dodaje access token

@Component
public class AccessTokenInterceptor implements ClientHttpRequestInterceptor {
    private OAuth2AuthorizedClientService authorizedClientService;

    @Autowired
    public AccessTokenInterceptor(OAuth2AuthorizedClientService authorizedClientService) {
        this.authorizedClientService = authorizedClientService;
    }

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        // Add access token to request
        OAuth2AccessToken accessToken = getAccessToken();
        HttpHeaders headers = request.getHeaders();
        headers.add("Authorization", "Bearer " + accessToken.getTokenValue());

        return execution.execute(request, body);
    }

    private OAuth2AccessToken getAccessToken() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        OAuth2AuthorizedClient auth2AuthorizedClient = authorizedClientService.loadAuthorizedClient("spotify", authentication.getName());
        return auth2AuthorizedClient.getAccessToken();
    }
}

Teraz do każdego RestTemplate dodaje ten intenceptor (lub deklaruję jeden restTeplate jako bean) i wszystkie żądania są automatycznie autoryzowane.

Podobne pytania

+1 głos
1 odpowiedź 497 wizyt
pytanie zadane 18 czerwca 2022 w Java przez `Krzychuu Stary wyjadacz (13,940 p.)
0 głosów
1 odpowiedź 330 wizyt
pytanie zadane 13 czerwca 2023 w Java przez Mikołaj Pątkowski Użytkownik (530 p.)
0 głosów
2 odpowiedzi 1,421 wizyt
pytanie zadane 10 sierpnia 2019 w Java przez Aisekai Nałogowiec (42,190 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...