Implementazione di esempio di un gateway SCIM personalizzato
Oracle fornisce un'applicazione di esempio conforme alle specifiche SCIM e che è possibile utilizzare per sviluppare un gateway SCIM personalizzato per integrarlo con la propria applicazione personalizzata.
È possibile scaricare l'implementazione di esempio idcs-scim-gateway-app
dal sito https://github.com/oracle-samples/idm-samples/tree/master/idcs-scim-gateway-app.
Questo gateway personalizzato espone gli endpoint HTTP per abilitare operazioni quali la creazione, la ricerca, l'aggiornamento e l'eliminazione degli utenti. Il gateway personalizzato memorizza localmente le informazioni sugli utenti nel file db.json
. Questo file ha il formato JSON
.
Elemento | descrizione; |
---|---|
![]() |
Recupera http(s)://<scimgatehost:porta>/scimgate/Users Recupera http(s)://<scimgatehost:porta>/scimgate/Users/<id> |
![]() |
POST http(s)://<scimgatehost:porta>/scimgate/Users http(s)://<scimgatehost:porta>/scimgate/Users/<id> ELIMINA http(s)://<scimgatehost:porta>/scimgate/Users/<id> |
L'applicazione di esempio utilizza package express e body-parser. Il file server.js
implementa un instradamento per gli endpoint degli utenti:
"...
var express = require('express')
var app = express()
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var config = require('./config.js');
..."
Il file routes/users.js
definisce gli endpoint dell'API REST SCIM e mappa ogni endpoint alla funzione JavaScript corrispondente:
"...
//Get operation for /Users endpoint
app.get('/scimgate/Users', users.findAll);
//Get operation for /Users/:id endpoint
app.get('/scimgate/Users/:id', users.findOne);
//Put operation for /Users endpoint
app.post('/scimgate/Users', users.create);
//Put operation for /Users endpoint
app.put('/scimgate/Users/:id', users.update);
//Delete operation for /Users endpoint
app.delete('/scimgate/Users/:id', users.delete);
..."
Il file user.controller.js
implementa le funzioni JavaScript per creare, leggere, aggiornare ed eliminare gli utenti nell'area di memorizzazione utenti locale, rappresentata dal file userdb.json
:
"...
exports.findAll = function(req, res){
console.log('Entering findAll function.');
...
};
exports.findOne = function(req, res) {
console.log('Entering findOne function.');
...
};
exports.create = function(req, res){ console.log('Entering create function.');
...
};
exports.update = function(req, res){
console.log('Entering update function.');
...
};
exports.delete = function(req, res){ console.log('Entering delete function.');
...
};
..."
Il file userdb.json
contiene un array di utenti e la struttura di ogni voce utente segue lo standard della specifica SCIM, utilizzando un subset degli attributi utente:
{
"resources": [
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"id": "1",
"externalId": "1",
"userName": "user1@example.com",
"name": {
"formatted": "User 1 Name",
"familyName": "Name",
"givenName": "User 1"
},
"displayName": "User 1 DisplayName",
"active": true,
"password": "User1Password",
"emails": [
{
"value": "user1@example.com",
"type": "work",
"primary": true
}
]
}
]
}
Per autorizzare il client a effettuare richieste HTTP, l'applicazione gateway SCIM di esempio utilizza due variabili di ambiente che è necessario impostare prima di eseguire l'applicazione: ADMINUSER
e ADMINPASS
. Queste variabili rappresentano il nome utente e la password dell'amministratore per il servizio di autenticazione API. Per fornire i valori per queste variabili, impostare lo script shell run.sh
per ambienti UNIX o Mac oppure lo script batch run.bat
per ambienti Windows.
IAM invia queste credenziali amministrative sotto forma di intestazione di autorizzazione per tutte le richieste di autenticazione delle credenziali dell'amministratore, quindi accede al gateway SCIM personalizzato utilizzando il tipo di privilegio basic
.
È possibile modificare il codice sorgente dell'applicazione di esempio e implementare altri tipi di metodi di autenticazione in base alle proprie esigenze.
È inoltre possibile modificare il codice sorgente dell'applicazione di esempio in modo che, invece di contattare l'area di memorizzazione utenti locale (rappresentata dal file userdb.json
), la nuova applicazione di esempio contatti l'area di memorizzazione identità dell'applicazione per creare, leggere, aggiornare ed eliminare gli utenti.