Podesite autentifikaciju zasnovanu na pristupnom tokenu / OAuth-u
OAuth (Open Authorization) je otvoreni standard za autentikaciju i autorizaciju na bazi tokena koji se može koristiti za omogućavanje single sign-on (SSO) pristupa. OAuth omogućava da određene informacije o nalogu krajnjeg korisnika koriste servisi trećih strana, kao što je Facebook, bez izlaganja korisničke lozinke. Deluje kao posrednik u ime krajnjeg korisnika, pružajući servisu pristupni token koji ovlašćuje deljenje određenih podataka naloga.
Ova metoda autentikacije za Drupal API koristi OAuth 2.0 protokol za dobijanje sigurnosnog pristupnog tokena. Taj token se koristi za autentikaciju pristupa vašim Drupal API-jevima. OAuth metod pruža visoko enkriptovan i siguran pristupni token, osiguravajući da su vaši Drupal API-jevi dobro zaštićeni. Smatra se jednom od najsigurnijih metoda za sprečavanje neautorizovanog pristupa vašim Drupal REST ili JSONAPI endpoint-ovima. Ovaj modul je kompatibilan sa Drupal 7, Drupal 8, Drupal 9, Drupal 10 i Drupal 11.
Video vodič za podešavanje:
U OAuth 2.0 učestvuju sledeće tri strane:
- Korisnik poseduje podatke kojima se pristupa preko API-ja i želi da aplikacija ima pristup tim podacima.
- Aplikacija želi da pristupi podacima putem API-ja u ime korisnika.
- API endpoint kontroliše i omogućava pristup korisničkim podacima.
API će omogućiti pristup samo kada primi validan pristupni token od aplikacije. Način na koji aplikacija dobija token zavisi od korišćene OAuth šeme.
Preduslovi: Preuzimanje i instalacija:
- Preuzmite i instalirajte Drupal REST & JSON API Authentication modul.
- REST UI: Ovaj modul omogućava korisnički interfejs za podešavanje REST modula.
- Omogućite sledeće Web Services module u sekciji Extend (/admin/modules) na vašem Drupal sajtu:
- JSON: API
- REST UI
- RESTful Web Services
- Serialization
Koraci za podešavanje OAuth/Access Token autentikacije za API:
- Radi boljeg razumevanja, koristićemo primer dodavanja OAuth/Access Token autentikacije za API koji vraća korisničke podatke u Drupalu.
- Napomena: Drupal API za dobijanje informacija o korisniku koristi se za dobijanje korisničkih podataka.
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 dozvoljenih na tom API-ju. Ovo možete uraditi koristeći REST UI modul ili izmenom konfiguracije.
- Da biste omogućili API preko REST UI modula, kliknite na dugme Configure kod REST UI modula (kao što je prikazano ispod)
- U ovom primeru, omogućavamo /user/{user} API koji se nalazi pod Content sekcijom. Omogućite ovaj API klikom na Enable opciju ispred njega.
- Sada, pošto želimo da preuzmemo podatke o korisniku, izaberite sledeće konfiguracije:
- Metod: GET
- Format: json
- Provider za autentikaciju: rest_api_authentication
- Ovim omogućavate miniOrange REST API Authentication modulu da autentifikuje vaš API. Kliknite na Save Configuration za nastavak.
Podešavanje OAuth/Access Token autentikacije za API:
- U ovom koraku ćemo postaviti OAuth/Access Token kao metodu API autentikacije.
Da biste to uradili, idite na tab API Authentication u REST API Authentication modulu (/admin/config/people/rest_api_authentication/auth_settings)- Označite Enable Authentication i kliknite na dugme Save Settings.
- Ispod dugmeta Save Settings izaberite radio dugme OAuth/Access Token.
- Zatim kliknite na dugme Generate a new Client ID & Secret.
- Snimite Client ID i Secret jer će vam biti potrebni prilikom autentikacije Get User Info API-ja.
Dodelite Drupal ulogama dozvolu za pregled korisničkih informacija:
- Ako je potrebno, možete i ne-admin Drupal ulogama dodeliti dozvolu za pregled korisničkih informacija. To možete uraditi dodeljivanjem Drupal uloga dozvoli View User Information u sekciji dozvola (/admin/people/permissions) vašeg Drupal sajta.
To je to!!!
Sada pokušajte da preuzmete korisničke informacije putem API poziva koristeći OAuth/Access Token za autentikaciju.
Primeri:
- Prvo moramo napraviti API poziv da bismo dobili access token. Taj token ćemo koristiti za autentifikaciju Drupal API-ja za preuzimanje korisničkih informacija.
- miniOrange API Authentication modul podržava 2 tipa grant-a koje možete koristiti za dobijanje access tokena:
Password grant:
- Kod Password grant tipa, access token možemo dobiti slanjem POST zahteva koji sadrži Drupal korisničko ime i lozinku zajedno sa Client ID-jem izdatim od REST API Authentication modula.
Zahtev: POST <drupal_base_url>/rest_api/access_token
Telo:
grant_type = password
username = <drupal_korisničko_ime>
password = <drupal_lozinka>
client_id = <client_id>
CURL primer zahteva-
curl --location --request POST '<your_drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id= <drupal_client_id>' \
--data-urlencode 'username=<drupal_korisničko_ime>' \
--data-urlencode 'password=<drupal_lozinka>'
- Možete pogledati i sliku Postman zahteva ispod:
Client Credentials grant:
- Kod Client Credentials grant tipa, access token dobijamo slanjem POST zahteva sa Client ID-jem i Client Secret-om izdatim od API Authentication modula, zajedno sa korisničkim imenom Drupal korisnika.
Zahtev: POST <drupal_base_url>/rest_api/access_token
Telo:
grant_type = client_credentials
client_id = <client_id>
client_secret = <client_secret>
username = <drupal_korisničko_ime>
CURL primer zahteva-
curl --location --request POST '<drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<Client_ID>' \
--data-urlencode 'username=<drupal_korisničko_ime>' \
--data-urlencode 'client_secret=<Client_secret>'
- Možete pogledati i sliku Postman zahteva za dobijanje access tokena iz Drupala korišćenjem Client Credentials grant tipa.
- Uspešan odgovor vraća Access Token zajedno sa rokom važenja i tipom tokena (pogledajte sliku ispod)
Greške u odgovoru:
Greška | Opis |
INVALID_CREDENTIALS |
Ovu grešku ćete dobiti kada su korisničko ime ili lozinka netačni. Primer: |
INVALID_CLIENT_ID |
Ovu grešku ćete dobiti kada pošaljete netačan client ID. Primer: |
INVALID_CLIENT_SECRET |
Ovu grešku ćete dobiti kada pošaljete netačan client secret. Primer: |
MISSING_USERNAME |
Ovu grešku ćete dobiti kada niste prosledili neki od obaveznih parametara u zahtevu. Primer: |
Tekst preuzet sa Drupal Documentation.