JWT autentifikacija
Drupal API Authentication modul funkcioniše tako što šalje JWT token zajedno sa vašim API zahtevima radi autentikacije. Ovaj modul koristi JSON Web Token (JWT), otvoreni standard za bezbedno predstavljanje identiteta korisnika tokom interakcije dve strane.
U ovom koraku, zapravo se korisničko ime i lozinka vašeg Drupal sajta koriste da bi se najpre dobio JWT token. Nakon što su korisničko ime i lozinka verifikovani, Drupal REST API Authentication modul kreira potpisani JSON Web Token. API zatim vraća taj token nazad klijent aplikaciji.
Kada dobijete JWT token, možete koristiti taj token za izvršavanje operacija u Drupalu dok token ne istekne. Drupal REST API Authentication modul će dozvoliti pristup samo kada primi validan JWT iz aplikacije.
JWT može biti potpisan i verifikovan korišćenjem dva algoritma – HSA i RSA.
Hajde da vidimo kako možemo koristiti JWT token za API autentikaciju u Drupalu.
Video vodič za podešavanje:
Preduslovi: Preuzimanje i instalacija:
- Preuzmite i instalirajte Drupal REST & JSON API Authentication modul.
- REST UI: Ovaj modul vam pruža korisnički interfejs za podešavanje REST modula.
- Omogućite sledeće Web Services module u sekciji Extend (/admin/modules) vašeg Drupal sajta:
- REST UI
- RESTful Web Services
- Serialization
Koraci za podešavanje API autentikacije na bazi JWT-a:
- Radi boljeg razumevanja, koristićemo primer dodavanja JWT autentikacije za kreiranje osnovne stranice u Drupalu pomoću /node API-ja.
Omogućite API i dodelite metode i operacije na sledeći način:
- Prvi korak je omogućavanje API-ja i dodeljivanje metoda i operacija koje su dozvoljene za taj API. Ovo možete uraditi korišćenjem REST UI modula ili izmenom konfiguracije.
- Da biste omogućili API korišćenjem REST UI modula, kliknite na dugme Configure kod REST UI modula (kao što je prikazano ispod)
- U ovom primeru, želimo da omogućimo /node API koji se nalazi pod sekcijom content. Omogućite ovaj API klikom na Enable opciju ispred njega.
- Sada, pošto nam je cilj da kreiramo osnovnu stranicu na Drupalu, izaberite sledeće konfiguracije:
- Metod: POST
- Format: json
- Provider za autentikaciju: rest_api_authentication
- Odabirom rest_api_authentication omogućavate miniOrange REST API Authentication modulu da autentifikuje vaš API. Kliknite na Save Configuration da nastavite.
Podešavanje API autentikacije na bazi JWT-a:
-
U ovom koraku, postavićemo JWT kao metodu API autentikacije. Da biste to uradili, idite na karticu API Authentication u REST API Authentication modulu (/admin/config/people/rest_api_authentication/auth_settings)
- Označite Enable Authentication i kliknite na Save Settings.
- Ispod dugmeta Save Settings izaberite radio dugme JWT.
-
Ako želite da koristite eksterno kreirani JWT token za autentikaciju, možete to učiniti podešavanjem sledećih opcija:
- U polje Username Attribute unesite naziv atributa u kojem će biti primljeno korisničko ime.
- Ako želite da koristite eksterni JWT token, možete uneti i JWKS URI za verifikaciju tog JWT tokena u Drupalu.
Dodelite dozvole Drupal ulogama za kreiranje stranice:
-
Ako je potrebno, možete dodeliti ne-admin Drupal ulogama dozvolu za kreiranje osnovne stranice. To možete uraditi dodeljivanjem Drupal uloga dozvoli Basic page: Create new content u sekciji dozvola (/admin/people/permissions) vašeg Drupal sajta.
To je to!!!
Sada pokušajte da kreirate osnovnu stranicu putem API poziva koristeći JWT za autentikaciju.
Primeri:
-
Prvo moramo napraviti API poziv da bismo dobili JWT. Taj token ćemo zatim koristiti za autentikaciju Drupal API-ja za kreiranje osnovne stranice.
-
JWT možemo dobiti slanjem POST zahteva koji sadrži Drupal korisničko ime i lozinku. Potrebno je da korisničko ime i lozinka budu poslati u base64 kodiranom formatu. Pogledajte format zahteva ispod.
Zahtev: POST <your_drupal_base_url>/rest_api/id_token
Header: Authorization: Basic base64kodirano <korisničko_ime:lozinka;>
Accept: application/jsonCURL primer zahteva-
curl --location --request POST ' <your_drupal_base_url>/rest_api/id_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64kodirano <korisničko_ime:lozinka>'
-
Možete pogledati i sliku Postman zahteva za dobijanje JWT-a iz Drupala.
Zahtev:
-
Uspešan odgovor vraća JWT zajedno sa rokom važenja tokena. (pogledajte sliku ispod)
-
Ako dobijete bilo kakvu grešku u odgovoru, pogledajte tabelu ispod za opis greške i moguća rešenja.
Greška | Opis |
INVALID_CREDENTIALS |
Ovu grešku ćete dobiti kada je korisničko ime ili lozinka netačna. Primer: |
Autentikujte Drupal REST API-je koristeći dobijeni JWT:
- Da biste izvršili autentikaciju pomoću JWT-a, jednostavno dodajte primljeni JWT kao Bearer token u Authorization Header.
Zahtev: POST <drupal_base_url> /node?_format=json
Header: Authorization: Bearer primljeni_JWT
Accept: application/json
Telo:
{
"type":[
{"target_id":"page"}
],
"title":[
{"value":"Drupal Rest API Authentication"}
],
"body":[
{"value":"Page created using the JWT Authentication."}
]
}CURL primer zahteva-
curl --location --request POST ‘<drupal_base_url>/node?_format=json’\
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <primljeni_JWT>’ \
--data-raw '{
"type":[
{"target_id":"page"}
],
"title":[
{"value":"Drupal Rest API Authentication"}
],
"body":[
{"value":"Page created using the JWT Authentication."}
]
}'
Primer zahteva za kreiranje stranice koristeći JWT autentikaciju:
- Možete pogledati i Postman zahtev za isti slučaj:
- Uspešan odgovor izgledaće ovako:
- Možete proveriti kreiranu stranicu u content tabu Drupala.
-
Odgovori sa greškama i moguća rešenja:
Greška | Opis |
MISSING_AUTHORIZATION_HEADER |
Ovu grešku ćete dobiti kada ne pošaljete Authorization Header u API zahtevu ili ga je vaš server uklonio iz nekog razloga. Primer: |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE |
Ovu grešku dobijate kada pošaljete Authorization header, ali tip tokena nije Bearer Primer: |
TOKEN_EXPIRED |
Ovu grešku ćete dobiti kada pošaljete Authorization header, ali je access token istekao. Primer: |
USER_INFORMATION_NOT_FOUND |
Ovu grešku ćete dobiti prilikom pokušaja preuzimanja informacija o korisniku. Primer: |
INVALID_SIGNATURE |
Ovu grešku dobijate kada potpis tokena nije validan. Primer: |
Tekst preuzet sa Drupal Documentation.