API-sleutel Authenticatie
API-sleutel Authenticatie is een van de eenvoudigste methoden om Drupal REST API’s te beschermen. Zodra je API-sleutels hebt gegenereerd voor al je gebruikers, kun je die sleutels gebruiken om toegang tot je Drupal REST API’s te beveiligen.
Je kunt dit doen door de Drupal-gebruikersnaam en API-sleutel van de gebruiker mee te sturen in de Authorization-header van elk van je API-verzoeken. De Drupal API Authentication module zal het verzoek vervolgens authentiseren op basis van de gebruikersnaam en de bijbehorende API-sleutel. Deze module is compatibel met Drupal 7, Drupal 8, Drupal 9, Drupal 10 en Drupal 11.
Setup Video:
Vereisten: Download en Installatie:
- Download & installeer de Drupal REST & JSON API Authentication module.
- REST UI: Deze module biedt je een gebruikersinterface voor het configureren van de REST-module.
- Schakel de volgende Web Services modules in onder het gedeelte Uitbreiden (/admin/modules) van je Drupal-site:
- REST UI
- RESTful Web Services
- Serialization
Stappen om API-sleutel gebaseerde authenticatie in Drupal in te stellen:
- Voor beter begrip nemen we een voorbeeld van het toevoegen van API Key-gebaseerde authenticatie aan de Create User API voor Drupal.
- Let op dat de /entity/user API van Drupal wordt gebruikt om een gebruiker in Drupal aan te maken.
Schakel de API in en wijs methoden en operaties toe als volgt:
- De eerste stap is om de API in te schakelen en ook methoden en operaties toe te wijzen die zijn toegestaan op die specifieke API. Dit kan gedaan worden met de REST UI module of je kunt eenvoudig de configuratie aanpassen.
- Om de API in te schakelen via de REST UI module, klik je op de Configureer knop van de REST UI module (zoals hieronder weergegeven).
- In ons voorbeeld moeten we de /entity/user API inschakelen. Schakel deze API in met de optie Inschakelen ervoor.
- Aangezien ons doel is om een gebruiker in Drupal aan te maken, selecteer je de volgende configs:
- Methode: POST
- Formaat: json
- Authenticatieprovider: rest_api_authentication.
- Het selecteren van rest_api_authentication stelt de miniOrange REST API Authentication module in staat om je /entity/user API te authentiseren. Klik op de Configuratie opslaan knop om verder te gaan.
Maak een API-sleutel gebruikersveld in Drupal:
Let op: Als je de gratis versie van de module gebruikt, kun je deze stap overslaan.
In deze stap stellen we in hoe de API-sleutel wordt gebruikt om de API-calls te authentiseren. Hiervoor moeten we eerst een Gebruikersattribuutveld maken om een API-sleutel op te slaan.
- Navigeer naar het tabblad velden beheren (/admin/config/people/accounts/fields) van Drupal.
- Om het veld toe te voegen, klik je op de Veld toevoegen knop.
- Kies nu uit de Nieuw veld toevoegen dropdown de optie Tekst (Platte tekst) en voer API Key in het label tekstveld in. Klik daarna op de Opslaan en doorgaan knop om je instellingen op te slaan.
- Zorg ervoor dat de machinenaam van het gebruikersattribuut field_api_key is.
- Ga nu verder door te klikken op Veldinstellingen opslaan en vervolgens op de Instellingen opslaan knop om de veldcreatie te voltooien.
- Je ziet nu een extra API-sleutel tekstveld in je gebruikersprofiel.
Stel API-sleutel gebaseerde authenticatie in:
- In deze stap genereren we een API-sleutel. Ga hiervoor naar het tabblad API Authentication van de REST API Authentication Module. (/admin/config/people/rest_api_authentication/auth_settings)
- Selecteer de Authenticatie inschakelen checkbox en klik op Instellingen opslaan.
- Om de API Key-Based Authentication in te schakelen, selecteer je de API Key radio-knop.
- Op hetzelfde scherm kun je de API-sleutel genereren voor een specifieke gebruiker of voor alle gebruikers tegelijk.
- Op dit moment genereren we de API-sleutel alleen voor één gebruiker.
- Voer in het Gebruikersnaam invoeren tekstveld de gebruikersnaam in waarvoor je de API-sleutel wilt genereren en klik op de knop API-sleutel genereren voor deze gebruiker.
- Je kunt nu de gegenereerde API-sleutel bekijken in het API Key veld van je gebruikersprofiel.
- Houd de API-sleutel bij de hand, aangezien die later gebruikt zal worden bij het authentiseren van de API.
Verleen Drupal-rollen permissie om een gebruiker in Drupal aan te maken:
- Indien nodig kun je ook niet-admin Drupal-rollen permissie geven om een gebruiker in Drupal aan te maken. Je kunt dit doen door Drupal-rollen toe te wijzen aan de Gebruikers beheren permissie onder het permissiegedeelte (/admin/people/permissions) van je Drupal-site.
Dat is het!!!
- Laten we nu proberen een gebruiker in Drupal aan te maken via een API-call met behulp van een API-sleutel voor authenticatie.
Voorbeeld:
- Om een gebruiker in Drupal aan te maken moet je een POST-verzoek doen samen met de gebruikersnaam van de gebruiker en de API-sleutel die is uitgegeven door de miniOrange REST API Authentication Module. De waarde van de gebruikersnaam en API-sleutel moet in base64encoded formaat zijn. Je kunt onderstaande indeling gebruiken om een call te doen.
Verzoek: POST <your_drupal_base_url>/entity/user?_format=json
Header: Authorization: Basic base64encoded <username:api_key>
Accept: application/json
Content-Type: application/jsonBody:
{
"name": [
{"value": "<username>"}
],
"mail": [
{"value": "<email>"}
],
"pass":[
{"value": "<password>"}
],
"status":[
{"value": "1"}
]
}CURL Verzoek Formaat-
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<username:API key>’ \
--data-raw '{
"name": [
{"value": "Username"}
],
"mail": [
{"value": "email"}
],
"pass":[
{"value": "Password"}
],
"status":[
{"value": "1"}
]
}'
- Je kunt ook verwijzen naar de afbeelding van het Postman-verzoek hieronder:
- Een succesvol antwoord retourneert de gebruikersinformatie die je hebt aangemaakt. (zie de afbeelding hieronder)
- Als je een foutmelding ontvangt in het antwoord, kun je de onderstaande tabel raadplegen voor de foutbeschrijving en mogelijke oplossingen.
Foutantwoord:
Fout | Beschrijving |
MISSING_AUTHORIZATION_HEADER |
Je krijgt deze fout wanneer je geen Authorization Header meestuurt in het API-verzoek of als deze door je server is verwijderd om bepaalde redenen. Voorbeeld: |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Je krijgt deze fout wanneer je de Authorization header meestuurt maar in een ongeldig formaat. Voorbeeld: { "status": "error", "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE", "error_description": "Authorization header must be the type of Basic Authentication." } |
USER_DOES_NOT_EXIST |
Je krijgt deze fout wanneer de module geen account kan vinden dat hoort bij de gebruikersnaam die je in het verzoek hebt verstuurd. Voorbeeld: |
INVALID_API_KEY |
Je krijgt deze fout wanneer de API-sleutel die in de API-call is meegestuurd niet overeenkomt. Voorbeeld: |
USER_NAME_MISSING |
Je krijgt deze fout wanneer de module de gebruikersnaam niet kan vinden in de API-call. Voorbeeld: |
INVALID_AUTHORIZATION_HEADER |
Je krijgt deze fout wanneer de module de header niet correct kan decoderen of de gebruikersnaam en API-sleutel niet in de header vindt. Voorbeeld: |
Artikel van Drupal Documentatie.