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

JWT i OAuth2 - Spring Boot

Object Storage Arubacloud
0 głosów
1,419 wizyt
pytanie zadane 10 sierpnia 2019 w Java przez Aisekai Nałogowiec (42,190 p.)
Od kilku dni, walczę z zaimplementowaniem JWT i OAuth2 w moim Spring Bootowym projekcie. Sprawdziłem już kilka tutoriali, ze stron takich jak Bealdung czy Tutorialspoint. Próbowałem też pobrać jakieś projekty z Githuba gdzie jest to skonfigurowane, ale tam też nie działa. Czy jesteście wstanie wskazać jakiś tutorial gdzie byłaby przedstawiona krok po kroku implementacja OAuth2 i JWT? Ewentualnie projekt na Githubie który mógłbym pobrać, odpalić u siebie lokalnie i przeklikać Postmanem? Jedyne czego potrzebuję, to tego aby był to w miarę aktualny projekt.

Z góry dzięki za pomoc.

2 odpowiedzi

+1 głos
odpowiedź 12 sierpnia 2019 przez Arkadiusz Fajdek Dyskutant (9,450 p.)
wybrane 14 sierpnia 2019 przez Aisekai
komentarz 14 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
Ten zadziałał. Dzięki wielkie, teraz go trochę zrefaktoryzuję, przestudiuje i będzie fajny zalążek do pracy inżynierskiej :)
+1 głos
odpowiedź 13 sierpnia 2019 przez mbabane Szeryf (79,280 p.)

To co jest pokazane tutaj:

https://www.tutorialspoint.com/spring_boot/spring_boot_oauth2_with_jwt.htm

u mnie zadziałało.

Jedyne co musiałem dodać to dwie zależności w pom'ie:

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.0-b170127.1453</version>
</dependency>

 

komentarz 13 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
edycja 13 sierpnia 2019 przez Aisekai
A mógłbyś podać client_id, secret oraz wartość Authorization hedear'a? Bo za każdym razem, jak próbowałem wykorzystać ten tutorial, to wyskakiwało coś jak: "Fully authentication is required ..." i nie zdziwiłbym się, gdyby wina leżała po stronie wartości wprowadzanych w postmanie
komentarz 13 sierpnia 2019 przez mbabane Szeryf (79,280 p.)

Takie jak tam w tym tutorialu:

@Configuration
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {
   private String clientid = "tutorialspoint";
   private String clientSecret = "my-secret-key";

headery patrz na screeny na końcu (co prawda jakis gamoń je wstawiał bo chyba nie da sie ich powiększyć, ale są komentarze).

Dodatkowo Postman ma jakby wbudowany formularz pod te headery. Obczaj karte Authorization w sekcji budowania requestu, jestam rozwijane menu ze stosownymi opcjami (Ciebie interesuje Basic (do uzyskania tokenu) i Bearer (do przekazania otrzymanego tokenu)

komentarz 13 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
edycja 14 sierpnia 2019 przez Aisekai

Próbowałem teraz już kolejny raz wykorzystać to z tego linku i lipa. Za każdym razem podczas próby uzyskania Tokenu rzuca 401 i:

{
    "error": "unauthorized",
    "error_description": "Full authentication is required to access this resource"
}

Wszystko jest wrzucone tak jak na zdjeciach, tj:

Authorization: Basic dHV0b3JpYWxzcG9pbnQ6bXktc2VjcmV0LWtleQ==
Content-Type: application/x-www-form-urlencoded

Hedeara Authorization robiłem na kilka sposobów, czy to przepisywanie ręczne z zdjęcia, czy to za pomocą generatorów (Base 64) - zawsze taki sam, więc parametry to raczej nie problem. W propertiesach świeci mi się, że nie rozpoznaje fikter property. A parametry:

password: password
grant_type: password
username: tutorialspoint@gmail.com

Wcześniej też już próbowałem z takim samym skutkiem. Wszystko jest skopiowane z tutoriala, jedyne czym się różni to wersją Javy (u mnie 12) i Spring Boota (próbowałem 2.1.1.RELEASE i 2.1.1.7.RELEASE). Jakby co to tutaj link do githuba jeżeli mógłbyś sprawdzić: https://github.com/KamLar/praca-inzynierska

komentarz 14 sierpnia 2019 przez reaktywny Nałogowiec (40,990 p.)
edycja 14 sierpnia 2019 przez reaktywny
Mogę się mylić i być może moja odpowiedź nadaje się tylko do kosza, ale czy poniższa linia:

"-----BEGIN RSA PRIVATE KEY-----\n" +

jest częścią klucza prywatnego (podobnie na końcu i w kluczu publicznym), bo raczej wygląda na komentarz... Ale tak jak pisałem, mogę się mylić.

 

Kilka linków:

How to Secure REST API using Spring Security OAuth2 and JWT

http://sivatechlab.com/secure-rest-api-using-spring-security-oauth2-jwt/

Spring Security OAuth2 and Resource Server with JSON Web Token (JWT)
https://codeaches.com/blog/jwt-spring-security-oauth2-and-resource-server/

Spring Boot 2, OAuth2 and JWT authentication example
https://medium.com/@ChamithKodikara/jwt-oauth2-authentication-example-with-spring-boot-2-2e92bacd68e5

GitHub - tinmegali/Oauth2-Stateless-Authentication-with-Spring-and-JWT-Token: Oauth2 Stateless Authentication with Spring and JWT Token
https://github.com/tinmegali/Oauth2-Stateless-Authentication-with-Spring-and-JWT-Token
komentarz 14 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
Dzięki za kolejne linki, sprawdzę - może któryś zadziała.

Wydaje mi się, że:

"-----BEGIN RSA PRIVATE KEY-----\n" +
jest potrzebne, ponieważ bez tego, rzuca się że klucz prywatny i klucz publiczny nie pasują do siebie.

Jak będę miał jakieś problemy, to na pewno napiszę :D
komentarz 14 sierpnia 2019 przez reaktywny Nałogowiec (40,990 p.)
Linków jest sporo, bo to temat JWT + Oauth jest popularny. Dziwię się, że ludzie zajmujący się Springiem nie ułatwili trochę tego zadania. Takie często powtarzane czynności powinny być uproszczone i skrócone do minimum.
1
komentarz 14 sierpnia 2019 przez mbabane Szeryf (79,280 p.)

Co do tego:

"-----BEGIN RSA PRIVATE KEY-----\n" 

Jest to header formatu PEM, w którym zapisany jest klucz, jest to konieczne ponieważ PEM jest dość uniwersalne i tekstowe, więc trzeba jakoś odróżniać co jest co (może to być np. też cały certyfikat):

https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail

komentarz 14 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
Dzięki wielkie za pomoc. Co prawda nie udało mi się dostać tokena wykorzystując ten tutorial, ale wykorzystałem tutorial od Arkadiusza.
komentarz 15 sierpnia 2019 przez reaktywny Nałogowiec (40,990 p.)

@mbabane, dobrze wiedzieć - dzięki!

 

komentarz 15 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
Ten z tutorialspoint też jakoś zadziałał. Wrzuciłem encoded secret i ustawiłem client i secret tak jak było w tym co Arkadiusz wrzucił i zadziałało. Prawdopodobnie błąd leżał gdzieś w tym, że podawałem w jakiś sposób zły Authorization header - mimo, że parę razy sprawdzałem i był taki sam jak w komentarzu. Nawet wykorzystałem narzędzie do encdodowania client_id i secret, ale to też nie pomogło. Jeszcze raz dzięki!

Podobne pytania

0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 13 czerwca 2023 w Java przez Mikołaj Pątkowski Użytkownik (530 p.)
+1 głos
1 odpowiedź 492 wizyt
pytanie zadane 18 czerwca 2022 w Java przez `Krzychuu Stary wyjadacz (13,940 p.)
+2 głosów
2 odpowiedzi 227 wizyt

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 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!

...