Beispielimplementierung eines benutzerdefinierten SCIM-Gateways

Oracle bietet eine Beispielanwendung, die mit SCIM-Spezifikationen übereinstimmt und mit der Sie ein benutzerdefiniertes SCIM-Gateway zur Integration mit Ihrer benutzerdefinierten Anwendung entwickeln können.

Sie können die Beispielimplementierung idcs-scim-gateway-app von https://github.com/oracle-samples/idm-samples/tree/master/idcs-scim-gateway-app herunterladen.

Dieses benutzerdefinierte Gateway stellt HTTP-Endpunkte bereit, um Vorgänge wie das Erstellen, Suchen, Aktualisieren und Löschen von Benutzern zu ermöglichen. Das benutzerdefinierte Gateway speichert Informationen zu den Benutzern lokal in der Datei db.json. Diese Datei hat das JSON-Format.

Ein benutzerdefiniertes SCIM-Gateway, das HTTP-Endpunkte bereitstellt, um Vorgänge wie Suchen, Erstellen, Aktualisieren und Löschen von Benutzern zu ermöglichen
Element Beschreibung
Callout 2

GET http(s)://<scimgatehost:port>/scimgate/Users

GET http(s)://<scimgatehost:port>/scimgate/Users/<id>

Callout 2

POST http(s)://<scimgatehost:port>/scimgate/Users

PUT http(s)://<scimgatehost:port>/scimgate/Users/<id>

DELETE http(s)://<scimgatehost:port>/scimgate/Users/<id>

Die Beispielanwendung verwendet Express- und Body-parser-Packages. Die Datei server.js implementiert eine Route für die Endpunkte der Benutzer:

"...
var express = require('express')
var app = express()
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var config = require('./config.js');
..."

Die Datei routes/users.js definiert die SCIM-REST-API-Endpunkte und ordnet jeden Endpunkt der entsprechenden JavaScript-Funktion zu:

"...
//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);
..."

Die Datei user.controller.js implementiert JavaScript-Funktionen zum Erstellen, Lesen, Aktualisieren und Löschen von Benutzern im lokalen Benutzerspeicher, dargestellt durch die Datei 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.');
...
};

..."

Die Datei userdb.json enthält ein Array von Benutzern, und die Struktur jedes Benutzereintrags folgt dem SCIM-Spezifikationsstandard, wobei eine Teilmenge der Benutzerattribute verwendet wird:

{
  "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
        }
      ]
    }
  ]
}

Um den Client zum Erstellen von HTTP-Anforderungen zu autorisieren, verwendet die Beispielanwendung für das SCIM-Gateway zwei Umgebungsvariablen, die Sie vor der Ausführung der Anwendung festlegen müssen: ADMINUSER und ADMINPASS. Diese Variablen stellen den Benutzernamen und das Kennwort des Administrators für den API-Authentifizierungsservice dar. Sie geben Werte für diese Variablen an, indem Sie das Shellskript run.sh für UNIX- oder Mac-Umgebungen oder das Batchskript run.bat für Windows-Umgebungen einrichten.

IAM sendet diese administrativen Zugangsdaten in Form eines Autorisierungsheaders für alle Anforderungen zur Authentifizierung der Administratorzugangsdaten und greift dann mit dem Berechtigungstyp basic auf das benutzerdefinierte SCIM-Gateway zu.

Sie können den Quellcode der Beispielanwendung ändern und andere Authentifizierungsmethoden implementieren, die Ihre Anforderungen erfüllen.

Sie können auch den Quellcode der Beispielanwendung ändern, sodass die neue Beispielanwendung nicht den lokalen Benutzerspeicher (dargestellt durch die Datei userdb.json), sondern den Identitätsspeicher Ihrer Anwendung kontaktiert, um Benutzer zu erstellen, zu lesen, zu aktualisieren und zu löschen.