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 l'applicazione personalizzata.
È possibile scaricare l'implementazione di esempio idcs-scim-gateway-app da 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 |
|---|---|
![]() |
GET http(s)://<scimgatehost:porta>/scimgate/Users GET http(s)://<scimgatehost:porta>/scimgate/Users/<id> |
![]() |
POST http(s)://<scimgatehost:porta>/scimgate/Users HTTP PUT://<scimgatehost:porta>/scimgate/Users/<id> ELIMINA http(s)://<scimgatehost:porta>/scimgate/Users/<id> |
L'applicazione di esempio utilizza pacchetti 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 degli 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 sottoinsieme 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 della shell run.sh per gli ambienti UNIX o Mac o lo script batch run.bat per gli 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 degli utenti locale (rappresentata dal file userdb.json), la nuova applicazione di esempio contatti l'area di memorizzazione delle identità dell'applicazione per creare, leggere, aggiornare ed eliminare gli utenti.


