Exemple de mise en oeuvre d'une passerelle SCIM personnalisée
Oracle fournit un exemple d'application conforme aux spécifications SCIM, et que vous pouvez utiliser pour développer une passerelle SCIM personnalisée à intégrer à votre application personnalisée.
Vous pouvez télécharger l'exemple de mise en oeuvre idcs-scim-gateway-app
à partir de https://github.com/oracle-samples/idm-samples/tree/master/idcs-scim-gateway-app.
Cette passerelle personnalisée expose les points d'extrémité HTTP pour permettre des opérations telles que la création, la recherche, la mise à jour et la suppression d'utilisateurs. La passerelle personnalisée stocke localement les informations sur les utilisateurs dans le fichier db.json
. Ce fichier a le format JSON
.
Élément | Description |
---|---|
![]() |
GET http(s) ://<scimgatehost:port>/scimgate/Users GET http(s) ://<scimgatehost:port>/scimgate/Users/<id> |
![]() |
POST http(s) ://<scimgatehost:port>/scimgate/Users PUT http(s) ://<scimgatehost:port>/scimgate/Users/<id> DELETE http(s) ://<scimgatehost:port>/scimgate/Users/<id> |
L'exemple d'application utilise des ensembles express et body-parser. Le fichier server.js
met en oeuvre une route pour les points d'extrémité des utilisateurs :
"...
var express = require('express')
var app = express()
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var config = require('./config.js');
..."
Le fichier routes/users.js
définit les points d'extrémité d'API REST SCIM et mappe chacun d'eux à la fonction JavaScript correspondante :
"...
//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);
..."
Le fichier user.controller.js
met en oeuvre les fonctions JavaScript pour créer, lire, mettre à jour et supprimer des utilisateurs dans le magasin d'utilisateurs local, représenté par le fichier 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.');
...
};
..."
Le fichier userdb.json
contient un tableau d'utilisateurs, et la structure de chaque entrée d'utilisateur respecte la norme de spécification SCIM, à l'aide d'un sous-ensemble des attributs d'utilisateur :
{
"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
}
]
}
]
}
Pour autoriser le client à effectuer des demandes HTTP, l'exemple d'application de passerelle SCIM utilise deux variables d'environnement que vous devez définir avant d'exécuter l'application : ADMINUSER
et ADMINPASS
. Ces variables représentent le nom d'utilisateur et le mot de passe de l'administrateur pour votre service d'authentification d'API. Vous fournissez des valeurs pour ces variables en configurant le script d'interpréteur de commandes run.sh
pour les environnements UNIX ou Mac, ou le script par lots run.bat
pour les environnements Windows.
Le service GIA envoie ces données d'identification d'administration sous la forme d'un en-tête d'autorisation pour toutes les demandes d'authentification des données d'identification de l'administrateur, puis accède à la passerelle SCIM personnalisée à l'aide du type de droit basic
.
Vous pouvez modifier le code source de l'exemple d'application et mettre en oeuvre d'autres types de méthode d'authentification en fonction de vos besoins.
Vous pouvez également modifier le code source de l'exemple d'application de sorte qu'au lieu de communiquer avec le magasin d'utilisateurs local (représenté par le fichier userdb.json
), le nouvel exemple d'application communique avec le magasin d'identités de votre application pour créer, lire, mettre à jour et supprimer des utilisateurs.