Implementação de Amostra de um Gateway SCIM Personalizado
A Oracle fornece um aplicativo de amostra que está em conformidade com as especificações SCIM e que você pode usar para desenvolver um gateway SCIM personalizado para integrá-lo ao seu aplicativo personalizado.
Você pode fazer download da implementação de amostra idcs-scim-gateway-app
em https://github.com/oracle-samples/idm-samples/tree/master/idcs-scim-gateway-app.
Esse gateway personalizado expõe pontos finais HTTP para ativar operações como criar, pesquisar, atualizar e excluir usuários. O gateway personalizado armazena informações sobre os usuários localmente no arquivo db.json
. Esse arquivo tem o formato JSON
.
Item | Descrição |
---|---|
![]() |
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> |
O aplicativo de amostra usa os pacotes expresso e body-parser. O arquivo server.js
implementa uma rota para os pontos finais dos usuários:
"...
var express = require('express')
var app = express()
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var config = require('./config.js');
..."
O arquivo routes/users.js
define os pontos finais da API REST SCIM e mapeia cada ponto final para a função JavaScript correspondente:
"...
//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);
..."
O arquivo user.controller.js
implementa funções JavaScript para criar, ler, atualizar e excluir usuários no armazenamento de usuário local, representado pelo arquivo 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.');
...
};
..."
O arquivo userdb.json
contém um array de usuários e a estrutura de cada entrada do usuário segue o padrão de especificação SCIM, usando um subconjunto dos atributos de usuário:
{
"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
}
]
}
]
}
Para autorizar o cliente a fazer solicitações HTTP, o aplicativo de gateway SCIM de amostra usa duas variáveis de ambiente que você deve definir antes de executar o aplicativo: ADMINUSER
e ADMINPASS
. Essas variáveis representam o nome de usuário e a senha do administrador do serviço de autenticação de API. Você fornece valores para essas variáveis configurando o script de shell run.sh
para ambientes UNIX ou Mac ou o script de batch run.bat
para ambientes Windows.
O serviço IAM envia essas credenciais administrativas na forma de um cabeçalho de autorização a todas as solicitações para autenticar as credenciais do administrador e, em seguida, acessa o gateway SCIM personalizado usando o tipo de concessão basic
.
Você pode modificar o código de origem do aplicativo de amostra e implementar outros tipos de métodos de autenticação que correspondam aos seus requisitos.
Você também pode alterar o código de origem do aplicativo de amostra para que, em vez de entrar em contato com o armazenamento de usuário local (representado pelo arquivo userdb.json
), o novo aplicativo de amostra entre em contato com o armazenamento de identidades do aplicativo para criar, ler, atualizar e excluir usuários.