Autenticazione REST API utilizzando un provider di identità esterno
Se stai cercando di proteggere/restringere l’accesso alle tue API REST di Drupal utilizzando un provider di identità, allora dovresti utilizzare il metodo di Autenticazione tramite Provider di Identità Esterno.
L’autenticazione API di Drupal utilizzando un provider di identità esterno prevede l’uso di token ricevuti da provider terzi come Google, Azure AD, Keycloak, Okta, Gitlab, ecc. per accedere in modo sicuro alle API REST di Drupal.
In questo metodo, è necessario configurare il modulo con l’endpoint User Info fornito dal tuo provider di identità e l’attributo username del provider. In questo modo potrai autenticare tutte le richieste API di Drupal utilizzando il token fornito dal provider. Il modulo Drupal REST API verifica le credenziali ricevute rispetto all’account utente di Drupal. Questo modulo è compatibile con Drupal 7, Drupal 8, Drupal 9, Drupal 10 e Drupal 11.
Video di configurazione:
Prerequisiti: Download e Installazione:
- Scarica e installa il modulo Drupal REST & JSON API Authentication.
- REST UI: questo modulo fornisce un’interfaccia utente per configurare il modulo REST.
- Abilita i seguenti moduli Web Services dalla sezione Estendi (/admin/modules) del tuo sito Drupal:
- REST UI
- RESTful Web Services
- Serialization
Passaggi per configurare l'autenticazione API usando un'applicazione/provider esterno:
- Per una migliore comprensione, prenderemo come esempio l’aggiunta dell’autenticazione basata su provider esterno all’API di creazione utente in Drupal.
- Nota: l’API
/entity/user
di Drupal viene utilizzata per creare un utente.
Abilita l’API e assegna metodi e operazioni:
- Il primo passo è abilitare l’API e definire metodi e operazioni consentiti. Questo può essere fatto usando il modulo REST UI o modificando direttamente la configurazione.
- Per abilitare l’API usando REST UI, clicca sul pulsante Configura del modulo REST UI (come mostrato sotto):
- Nel nostro esempio, dobbiamo abilitare l’API /entity/user presente sotto Utente. Abilita questa API cliccando su “Abilita” davanti a essa.
- Poiché il nostro obiettivo è creare un utente in Drupal, seleziona le seguenti configurazioni:
- Metodo: POST
- Formato: json
- Provider di autenticazione: rest_api_authentication
- Selezionando
rest_api_authentication
permetterai al modulo miniOrange di autenticare le richieste API. Clicca su Salva configurazione per continuare.
Configurazione del modulo Drupal REST API Authentication:
- In questo passaggio, configureremo il Provider di identità esterno come metodo di autenticazione API. Vai alla scheda “API Authentication” del modulo REST API Authentication (
/admin/config/people/rest_api_authentication/auth_settings
)- Seleziona la casella Abilita Autenticazione e clicca su Salva impostazioni.
- Sotto il pulsante, seleziona l’opzione External Identity Provider.
- Nel campo “User Info Endpoint” inserisci l’URL fornito dal tuo provider per recuperare le informazioni dell’utente via token.
- Nel campo “Username Attribute” inserisci la chiave/attributo dove viene inviato il nome utente dal provider esterno.
Concedi i permessi ai ruoli Drupal per creare un utente:
- Se necessario, puoi concedere ai ruoli non amministrativi il permesso di creare utenti. Vai a
/admin/people/permissions
e assegna il permesso Amministrare utenti al ruolo desiderato.
Fatto!!!
- Ora possiamo provare a creare un utente in Drupal tramite una chiamata API utilizzando un provider di identità esterno per l’autenticazione.
Esempi:
- Per creare un utente in Drupal devi effettuare una richiesta POST con il token ricevuto dal provider.
Richiesta: POST <tuo_url_base_drupal>/entity/user?_format=json
Header: Token: <token_ricevuto_dal_provider>
Accept: application/json
Content-Type: application/jsonCorpo:
{
"name": [ { "value": "<username>" } ],
"mail": [ { "value": "<email>" } ],
"pass": [ { "value": "<password>" } ],
"status": [ { "value": "1" } ]
}Formato richiesta CURL:
curl --location --request POST '<tuo_url_base_drupal>/entity/user?_format=json' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'Token: <token_ricevuto_dal_provider>' \ --data-raw '{ "name": [{ "value": "Username" }], "mail": [{ "value": "email" }], "pass": [{ "value": "Password" }], "status": [{ "value": "1" }] }'
- Puoi anche fare riferimento all’immagine della richiesta Postman qui sotto:
- Una risposta corretta restituisce le informazioni dell’utente creato (vedi immagine sotto).
- Se ricevi un errore in risposta, consulta la seguente tabella con descrizione e possibili soluzioni.
Risposta di errore:
Errore | Descrizione |
INVALID_USER_INFO_ENDPOINT | Riceverai questo errore se l’URL del user info endpoint inserito nella configurazione è errato. |
INVALID_USERNAME_ATTRIBUTE | Errore generato se il campo attributo username nella configurazione è errato o mancante. |
INVALID_TOKEN | Errore mostrato quando il token fornito è errato o mancante dall’header della richiesta. |
Articolo da Drupal Documentation.