カスタム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
形式です。
項目 | 説明 |
---|---|
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> |
サンプル・アプリケーションでは、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
ファイルで表される)ローカル・ユーザー・ストアに接続するかわりに、新しいサンプル・アプリケーションでアプリケーションのアイデンティティ・ストアに接続してユーザーの作成、読取り、更新および削除を行うこともできます。