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:
Ambiente | URL |
---|---|
UAT (User Acceptance Testing) | https://beneficiario-hml.funcionalhealthtech.com.br |
Produção | https://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:
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.