Autentifikacija pomoću API ključa
API Key autentikacija je jedan od najjednostavnijih načina za zaštitu Drupal REST API-ja. Kada generišete API ključeve za sve korisnike, možete koristiti te ključeve za zaštitu pristupa vašim Drupal REST API-jima.
To možete postići tako što ćete korisničko ime korisnika u Drupalu i njegov API ključ slati u Authorization header-u svakog API zahteva. Drupal API Authentication modul će tada izvršiti autentikaciju na osnovu korisničkog imena i odgovarajućeg API ključa. Ovaj modul je kompatibilan sa Drupal 7, Drupal 8, Drupal 9, Drupal 10 i Drupal 11.
Video vodič za podešavanje:
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 iz sekcije Extend (/admin/modules) vašeg Drupal sajta:
- REST UI
- RESTful Web Services
- Serialization
Koraci za podešavanje autentikacije na osnovu API ključa u Drupalu:
- Radi boljeg razumevanja, koristićemo primer dodavanja API Key autentikacije za API za kreiranje korisnika u Drupalu.
- Napomena: /entity/user API u Drupalu koristi se za kreiranje korisnika.
Omogućite API i dodelite metode i operacije na sledeći način:
- Prvi korak je da omogućite API i dodelite metode i operacije dozvoljene za taj API. Ovo možete uraditi korišćenjem REST UI modula ili izmenom konfiguracije.
- Da biste omogućili API koristeći REST UI modul, kliknite na dugme Configure kod REST UI modula (kao što je prikazano ispod)
- U ovom primeru potrebno je omogućiti /entity/user API. Omogućite ovaj API pomoću Enable opcije ispred njega.
- Sada, pošto je cilj da kreiramo korisnika u 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š /entity/user API. Kliknite na Save Configuration za nastavak.
Kreirajte korisničko polje za API ključ u Drupalu:
Napomena: Ako koristite besplatnu verziju modula, ovaj korak možete preskočiti.
U ovom koraku postavićemo način kako se API ključ koristi za autentikaciju API poziva. Prvo, potrebno je da kreirate korisničko polje za skladištenje API ključa.
- Idite na karticu manage field (/admin/config/people/accounts/fields) na svom Drupal sajtu.
- Za dodavanje polja, kliknite na dugme Add field.
- U dropdown meniju Add a new field izaberite Text (Plain) i unesite API Key kao labelu polja. Kliknite na Save and continue da sačuvate podešavanja.
- Obavezno proverite da mašinsko ime atributa bude field_api_key.
- Završite kreiranje klikom na Save field settings i zatim na Save Settings dugme.
- Sada ćete videti dodatno tekstualno polje za API ključ u korisničkom profilu.
Podešavanje autentikacije na osnovu API ključa:
- U ovom koraku generisaćemo API ključ, idite na API Authentication tab REST API Authentication modula. (/admin/config/people/rest_api_authentication/auth_settings)
- Označite Enable Authentication i kliknite na Save Settings.
- Za omogućavanje API Key autentikacije izaberite radio dugme API Key.
- Na istom ekranu možete generisati API ključ za određenog korisnika ili za sve korisnike odjednom.
- Sada ćemo generisati API ključ za jednog korisnika.
- U polje Enter username unesite korisničko ime za koje želite da generišete API ključ i kliknite na dugme Generate API key for this user.
- Sada možete videti generisani API ključ u korisničkom profilu u polju za API ključ.
- Sačuvajte API ključ jer će biti potreban prilikom autentikacije API-ja.
Dodelite Drupal ulogama dozvolu za kreiranje korisnika u Drupalu:
- Ako je potrebno, možete dodeliti ne-admin Drupal ulogama dozvolu za kreiranje korisnika. To možete uraditi dodeljivanjem Drupal uloge dozvoli Administer users u sekciji dozvola (/admin/people/permissions) vašeg Drupal sajta.
To je to!!!
- Sada možete pokušati da kreirate korisnika u Drupalu putem API poziva koristeći API ključ za autentikaciju.
Primer:
- Za kreiranje korisnika u Drupalu potrebno je da pošaljete POST zahtev zajedno sa korisničkim imenom i API ključem koji izdaje miniOrange REST API Authentication modul. Vrednosti korisničkog imena i API ključa moraju biti u base64 kodiranom formatu. Pogledajte format ispod.
Zahtev: POST <your_drupal_base_url>/entity/user?_format=json
Header: Authorization: Basic base64encoded <username:api_key>
Accept: application/json
Content-Type: application/jsonTelo:
{
"name": [
{"value": "<korisničko_ime>"}
],
"mail": [
{"value": "<email>"}
],
"pass":[
{"value": "<lozinka>"}
],
"status":[
{"value": "1"}
]
}CURL primer zahteva-
curl --location --request POST ‘<your_drupal_base_url>/entity/user?_format=json' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64encoded<korisničko_ime:API ključ>’ \
--data-raw '{
"name": [
{"value": "KorisničkoIme"}
],
"mail": [
{"value": "email"}
],
"pass":[
{"value": "Lozinka"}
],
"status":[
{"value": "1"}
]
}'
- Možete pogledati i sliku Postman zahteva ispod:
- Uspešan odgovor vraća informacije o korisniku kojeg ste kreirali. (pogledajte sliku ispod)
- Ako dobijete grešku u odgovoru, pogledajte tabelu ispod za opis greške i moguća rešenja.
Greške u odgovoru:
Greška | Opis |
MISSING_AUTHORIZATION_HEADER |
Ovu grešku ćete dobiti kada ne pošaljete Authorization Header u API zahtevu ili ga je server uklonio iz nekog razloga. Primer: |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Ovu grešku dobijate kada pošaljete Authorization header, ali nije u validnom formatu. Primer: { "status": "error", "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE", "error_description": "Authorization header must be the type of Basic Authentication." } |
USER_DOES_NOT_EXIST |
Ovu grešku dobijate kada modul ne pronađe nalog koji odgovara korisničkom imenu iz zahteva. Primer: |
INVALID_API_KEY |
Ovu grešku dobijate kada API ključ poslat u API pozivu ne odgovara. Primer: |
USER_NAME_MISSING |
Ovu grešku dobijate kada modul ne može da pronađe korisničko ime u API pozivu. Primer: |
INVALID_AUTHORIZATION_HEADER |
Ovu grešku dobijate kada modul ne može ispravno da dekodira header ili ne pronađe korisničko ime i API ključ u header-u. Primer: |
Tekst preuzet sa Drupal Documentation.