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.

Um gateway SCIM personalizado que expõe pontos finais HTTP para ativar operações como pesquisa, criação, atualização e exclusão de usuários
Item Descrição
Legenda 2

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

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

Legenda 2

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.