Pular para o conteúdo principal

Incoporação

É possível incorporar o portal de beneficiários como um Iframe em aplicações web ou como uma WebView em aplicações para dispositivos móveis (Android/iOS).

Incoporando o portal

O Iframe ou WebView deverá apontar para a URL do portal no ambiente desejado:

AmbienteURL
UAT (User Acceptance Testing)https://beneficiario-hml.funcionalhealthtech.com.br
Produçãohttps://beneficiario.funcionalhealthtech.com.br

Tema personalizado

Caso a sua empresa possua um tema personalizado, será necessário informar também qual é o código da empresa no campo client_id. Por exemplo:

https://beneficiario.funcionalhealthtech.com.br?client_id=ACME

Dica

O valor do parâmetro client_id será informado pelo time de EDI da Funcional.

Iniciar com usuário já autenticado

Para evitar exibir uma tela de login e já carregar o portal incoporado com o usuário autenticado, será necessário que seja informado um parâmetro adicional com o token JWT do usuário. Exemplo:

# Ignore as quebras de linha, elas só facilitam a leitura:
https://beneficiario.funcionalhealthtech.com.br
?client_id=ACME
&token=eyJhbGciOiJIU.eyJzdWIiOiIxMjM0NTY3ODk.SflKxwRJSMeKc

Existem dois tipos de token JWT que podem ser injetados:

  • Tokens JWT gerados do lado do cliente
  • Tokens JWT gerados pela própria Funcional, a partir do login e senha do beneficiário

Autenticação com token gerado pelo cliente

Caso a sua empresa prefira utilizar seu próprio mecanismo de autenticação, é possível seguir um fluxo alternativo de autenticação:

Diagrama resumindo o fluxo

Geração das Chaves

Deverá ser gerado um par de chaves RSA, seja via ferramentas online ou via linha de comando no Linux:

# Criação da chave privada
ssh-keygen -t rsa -f chave-privada.key -N ''

# É possível informar o parâmetro -b com a quantidade de bytes desejada,
# aumentando a segurança, caso a padrão não seja o suficiente para
# as políticas de segurança da empresa

# Criação da chave pública
openssl rsa -in chave-privada.key -pubout -outform PEM -out chave-publica.key.pub

Exemplo de chave privada chave-privada.key:

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgGtR0xp9TBqGuNS049U8J9QS00vINiljehmALHTFXtlx+QUVr6Bt
PAorrmjCzE5fD2Nj/o085TAcd0gnp4L4+tF5vnoVwejCHKYCp4mTuPSOSOX2p/AG
Ybx60P/iSq4TqvBoCuRh2qtmE1ovchhyUcVcXsa2HZvWp/zgH6DWFqwlAgMBAAEC
gYA44iEDzF/3O2tiixKr5nux49yNMWzL2UdRlud5aVgR52A3erwhS2TkeyyxqHbE
H4y3gLvevuU38A6ldydJu5CtoNKMFPzv/6PcaYZsp/gScTkqR3zYp89EHa6WnDN1
vMFchYZciY90VPZgPu83o+z/ePfd65arHxtP6arhXFWEYQJBALaQ8uyMKve/wt9a
tJtKzo6AFd6f2KMJWN2bbH9YvWxhMv225MJLsxrZaO+sJRMUaW4aZ+XNreUzBAzY
0GrseqkCQQCWfKY+BY8A6+cOQszre9h5ucwSlaHOwFa5layKbIFgmPY08XGNLbh6
E9Mvm7BUQvUFYDa6DS8/V/yoXVXrIe8dAkAHbIOEXPrOUkzxWjXn7rXRk6HQCL39
ez7S3CQgVZJ2WsmBCbPptrxUxix/OofTa8wRvx8keCWvIVDz2Mk4397pAkBPFOIn
5bPowA+EJwaZGVQBY+oiOg/2Ho10qXsqoyq6IKgB2n/ZuRUg0hpBAof/P9CTKqSX
0SXrG8nikGn+Tq7hAkEAopYoifSZTa/qI0D87KD6pa7ph/Ya8kcDxEsovKIRT+NS
KmL2j5k68XrcTz9Yc1g3PEg2NLK9RuVbrGjbl/BcKg==
-----END RSA PRIVATE KEY-----

A chave privada será utilizada para criar tokens JWT no lado do cliente. A Funcional não deverá ter acesso à chave privada.

Exemplo de chave pública chave-publica.key.pub correspondente:

-----BEGIN PUBLIC KEY-----
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGtR0xp9TBqGuNS049U8J9QS00vI
NiljehmALHTFXtlx+QUVr6BtPAorrmjCzE5fD2Nj/o085TAcd0gnp4L4+tF5vnoV
wejCHKYCp4mTuPSOSOX2p/AGYbx60P/iSq4TqvBoCuRh2qtmE1ovchhyUcVcXsa2
HZvWp/zgH6DWFqwlAgMBAAE=
-----END PUBLIC KEY-----

A chave pública será utilizada para validar os tokens JWT do lado da Funcional. Esta chave deverá ser enviada para a Funcional.

Dica

Utilize pares de chaves diferentes para ambientes de desenvolvimento, homologação e produção.

Geração do Token JWT

Utilizando a linguagem de programação e biblioteca de sua preferência, deverá ser gerado um token JWT assinado com a chave privada (algoritmo RS256) com o seguinte conteúdo no payload:

{
"iss": "ACME", // mesmo valor do client_id
"sub": "1234" // número do cartão do beneficiário
}

O claim iss é uma abreviação de issuer ("emissor") e o claim sub é uma abreviação de subject, o "sujeito" identificado pelo token. Para mais informações sobre o que é e como funciona o padrão JWT, consulte a documentação da tecnologia.

Exemplo utilizando JavaScript:

// Importo uma biblioteca de JWT para minha linguagem de programação
var jwt = require("jsonwebtoken");

// Leio o conteúdo do arquivo com a chave privada da empresa
// Isso pode ser armazenado em cache, evitando I/O
var privateKey = fs.readFileSync("chave-privada.key");

// Preparo o conteúdo do meu token JWT
var payload = { iss: "ACME", sub: 1234 };

// Gero o token JWT contendo o payload acima e assinado com a chave acima
var token = jwt.sign(payload, privateKey, { algorithm: "RS256" });

// A saída será o meu token JWT
console.log(token);

Consulte uma lista abrangente de bibliotecas que suportam JWT em diferentes linguagens de programação.

Autenticação com usuário e senha da Funcional

Para criar um token será necessário chamar a mutation com o método createToken passando as credencias.

Aqui temos um exemplo de chamada para a criação de um token

mutation {
createToken(login: "<usuario>", password: "<senha>") {
token
}
}

Resposta

{
"data": {
"createToken": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
}
}
Dica

O mesmo token pode ser utilizado em várias chamadas, até sua expiração. Não há necessidade de gerar um novo token antes de cada chamada.

Horário de funcionamento do serviço de homologação

O serviço em ambiente de homologação está disponível de Segunda à Sabado das 09hs às 23hs.