Exemple d'implémentation de passerelle SCIM personnalisée
Oracle fournit un exemple d'application conforme aux spécifications SCIM, que vous pouvez utiliser pour développer une passerelle SCIM personnalisée afin de l'intégrer à votre application personnalisée.
Vous pouvez télécharger l'exemple d'implémentation 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 adresses d'API REST afin d'activer des opérations telles que la création, la recherche, la mise à jour et la suppression d'utilisateurs. La passerelle personnalisée stocke les informations relatives aux utilisateurs localement dans le fichier db.json
. Ce fichier est au format JSON
.
Elé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 les packages express et body-parser. Le fichier server.js
implémente un routage pour les adresses 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 adresses d'API REST SCIM et met en correspondance chaque adresse avec 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
implémente des fonctions JavaScript pour créer, lire, mettre à jour et supprimer des utilisateurs dans la banque des utilisateurs locale, représentée 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 utilisateur suit la norme de spécification SCIM, avec un sous-ensemble des attributs 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 utilisateur et le mot de passe de l'administrateur pour votre service d'authentification d'API. Afin de fournir des valeurs pour ces variables, configurez le script shell run.sh
pour les environnements UNIX ou Mac, ou le script de batch run.bat
pour les environnements Windows.
IAM envoie ces informations d'identification d'administration sous la forme d'un en-tête d'autorisation pour toutes les demandes afin d'authentifier les informations d'identification de l'administrateur, puis accède à la passerelle SCIM personnalisée à l'aide du type d'octroi basic
.
Vous pouvez modifier le code source de l'exemple d'application et implémenter d'autres types de méthode d'authentification répondant à vos besoins.
Vous pouvez également modifier le code source de l'exemple d'application de sorte qu'au lieu de contacter la banque des utilisateurs locale (représentée par le fichier userdb.json
), le nouvel exemple d'application contacte la banque d'identités de votre application pour créer, lire, mettre à jour et supprimer des utilisateurs.