カスタムSCIMゲートウェイの実装例

Oracleには、SCIM仕様に準拠するサンプル・アプリケーションがあり、カスタムSCIMゲートウェイを開発してカスタム・アプリケーションと統合するために使用できます。

サンプル実装idcs-scim-gateway-appは、https://github.com/oracle-samples/idm-samples/tree/master/idcs-scim-gateway-appからダウンロードできます。

このカスタム・ゲートウェイは、HTTPエンドポイントを公開して、ユーザーの作成、検索、更新、削除などの操作を有効にします。カスタム・ゲートウェイは、ユーザーに関する情報をdb.jsonファイルにローカルに格納します。このファイルはJSON形式です。

HTTPエンドポイントを公開してユーザーの検索、作成、更新、削除などの操作を有効にするカスタムSCIMゲートウェイ
項目 説明
コールアウト2

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

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

コールアウト2

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

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

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

サンプル・アプリケーションでは、expressおよびbody-parserパッケージを使用します。server.jsファイルは、ユーザーのエンドポイントのルートを実装します:

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

routes/users.jsファイルは、SCIM REST APIエンドポイントを定義し、各エンドポイントを対応するJavaScript関数にマップします:

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

user.controller.jsファイルは、userdb.jsonファイルで表されるローカル・ユーザー・ストアでユーザーを作成、読取り、更新および削除するためのJavaScript関数を実装します:

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

..."

userdb.jsonファイルにはユーザーの配列が含まれており、各ユーザー・エントリの構造はSCIM仕様標準に準拠しています(ユーザー属性のサブセットを使用):

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

クライアントにHTTPリクエストの作成を許可するために、サンプルSCIMゲートウェイ・アプリケーションは、アプリケーションを実行する前に設定する必要がある2つの環境変数ADMINUSERおよびADMINPASSを使用します。これらの変数は、API認証サービスの管理者のユーザー名とパスワードを表します。これらの変数の値を指定するには、run.shシェル・スクリプト(UNIXまたはMac環境の場合)またはrun.batバッチ・スクリプト(Windows環境の場合)を設定します。

IAMは、すべてのリクエストの認可ヘッダーの形式でこれらの管理資格証明を送信して管理者の資格証明を認証し、basic権限付与タイプを使用してカスタムSCIMゲートウェイにアクセスします。

サンプル・アプリケーションのソース・コードを変更し、要件に一致するように他のタイプの認証メソッドを実装できます。

サンプル・アプリケーションのソース・コードを変更して、(userdb.jsonファイルで表される)ローカル・ユーザー・ストアに接続するかわりに、新しいサンプル・アプリケーションでアプリケーションのアイデンティティ・ストアに接続してユーザーの作成、読取り、更新および削除を行うこともできます。