Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O objetivo deste guia é apresentar a API REST para desenvolvedores.

 


Visão Geral

A documentação a seguir fornece uma introdução às APIs REST V2 do fluig Identity. 


Para quem é voltada esta documentação? 

...

Informações
titleAtenção

Esta documentação é voltada à API REST específica do fluig Identity. Para consultar a documentação da API do fluig, acesse DES 069 - Fluig API.

 


O que eu devo saber?  

O esquema de autenticação e autorização das APIs REST V2 do fluig Identity são baseadas no padrão de autenticação servidor a servidor OAuth 2.0 utilizando JWT (JSON Web Token). 

...

 


Plataforma

A plataforma REST do fluig Identity é baseada nos padrões OAuth 2.0 com JWT (JSON Web Token) para estabelecer a comunicação servidor-a-servidor entre aplicativos.

...

 


Escopo do fluig Identity para APIs REST

...

Cada empresa possui um client-id e uma chave privada, que irá permitir o acesso aos dados específicos de sua empresa utilizando nossas REST APIs.

 


Começando

Para cada empresa são atribuídos recursos que garantem a segurança de acesso as dados da empresa: identificador do cliente, identificador da empresa e uma chave privada. O administrador corporativo possui acesso a esses recursos no menu de Configuração do fluig Identity. 


 


Crie/Assine o JWT

Criando JWT

...

{ “iss”: “INSIRA_O_CLIENT_ID_AQUI”}

 


Assinando o JWT

A assinatura do token JWT demanda vários passos para criptografar e assinar partes específicas do JWT, a fim de gerar o assertion. Estes passos são fornecidos como parte do padrão mencionado acima.

...

Bloco de código
languagejava
private PrivateKey getPrivateKeyFromPk8File(String pkcs8FilePath) throws fluigIdentityException
{
    try
    {
          FileInputStream fis = new FileInputStream(pkcs8FilePath);
          byte[] buf = IOUtils.toByteArray(fis);
          fis.read(buf);
          fis.close();
          PKCS8EncodedKeySpec kspec = new PKCS8EncodedKeySpec(buf);
          KeyFactory kf = KeyFactory.getInstance("RSA");
          return kf.generatePrivate(kspec);
    }
    catch (IOException | NoSuchAlgorithmException | InvalidKeySpecException ex)
    {
        throw new fluigIdentityException(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(),
              ex.getMessage(), "generateAssertion clientId: " + clientId);
     }
}
String jwtClaim = "{\"iss\": \"INSIRA_O_CLIENTE_ID_AQUI\"}";
Jwt encoded = JwtHelper.encode(jwtClaim, new RsaSigner((RSAPrivateKey)
getPrivateKeyFromPk8File("CAMINHO_PARA_O_ARQUIVO_PKCS8_CONTENDO_A_CHAVE_PRIVADA"));
String assertion = encoded.getEncoded();

 


JwtHelper (utilizado no código acima) é uma classe de ajuda da biblioteca spring-security-jwt que se encarrega de toda a criptografia base e assina o jwtClaim com a chave privada fornecida pelo desenvolvedor.

...

Bloco de código
titleExemplo de assertion
eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJmZmYwZGUzOS1hNGI1LTQzOWYtODgwOC01MjIxM2ZjZTc2YjgifQ.aneQAKQ0aO60bUN5WaeG5ZFTb6L4OA_rbO0x5XEV_6pi0bk8B2oW1gegOYtp3TKIRcN1dYr550sX1BnJJgr5WhVQhyiHbGCDDIN_cj2e6uMftqEpc7df900YVm5V-jSQXJLVUJbZb0GlFcuE3Jn3Un6vBoCnziVIcnyG-u-JJ88

 


Enviando/publicando o JWT para o fluig Identity

...

{hostname} para o servidor de produção do fluig Identity será https://app.fluigidentity.com 


 


O servidor do fluig Identity irá verificar o JWT e sua assinatura e então irá responder com um JSON, onde:

  • refresh_token: token utilizado para obter um access_token novo, quando o antigo access_token expirar
  • access_token: token utilizando para fazer todas as chamadas API REST. O access_token faz parte do Cabeçalho de Autenticação em todas as requisições API REST
  • client_id: REST client-id do Cliente
  • timeIssuedInMillis: Quando o access_token/refresh_token foi requisitado, em milissegundos.
  • expires_in: Quando o access_token expira. Atualmente, o access_token expira em 3600 segundos (1 hora)

...


Bloco de código
languagejs
titleResposta
{
  "refresh_token": "f6b54eb7dbd549868790bd94c50ba486",
  "access_token": "21552c08d0ee48b2a3c6312e49283b36",
  "client_id": "fff0de39-a4b5-439f-8808-52213fce76b8",
  "timeIssuedInMillis": 1389656667980,
  "expires_in": 3600
}

Se em algum momento o cliente perder o refresh_token, os mesmos passos acima podem ser seguidos para obter um refresh_token novo. 


Obtendo um Novo Access Token com o Refresh Token Fornecido

...

A URL para publicar o refresh_token é: http://{hostname}/rest/v2/oauth2/token

 


 


O servidor irá responder com o seguinte JSON:

Bloco de código
languagejs
titleResposta
{
  "access_token": "45c1500f1d0c449d80013adceba9946e",
  "client_id": "fff0de39-a4b5-439f-8808-52213fce76b8",
  "timeIssuedInMillis": 1389657257807,
  "expires_in": 3599
}

 


Fazendo as Chamadas com o Access Token

...

Com o Cabeçalho de Autenticação (access_token)

...


Deck of Cards
idChamadas com Access Token
Card
labelChamada

Cabeçalho

Card
labelResposta

Resposta


Bloco de código
languagejs
titleResposta com o cabeçalho de autenticação
collapsetrue
 {
   "id":"zyfmj7h41ntp556t",
   "itemName":"TOTVS LABS",
   "faxNumber":"650-666-6766",
   "emailAddress":"[email protected]",
   "address":"1161 Castro Street",
   "city":"Mountain View",
   "country":"USA",
   "state":"CA",
   "zip":"95067",
   "phoneNumber":"650-666-6766",
   "dateCreated":"Jan 13, 2014 2:42:17 PM",
   "createdBy":"7blpjw648d7ocjzo",
   "createdByName":"TOTVS Administrator",
   "subDomainName":"totvslabs.fluigidentity.com",
   "tokenRequired":false,
   "companyStatus":"CREATED",
   "emailDomains":[
   ],
   "customLogo":false,
   "selfSignUp":false,
   "adLoginEnabled":false,
   "adUserActivation":"ACTIVATION_BY_EMAIL",
   "adPasswordChangeEnabled":false,
   "userActivation":"EMAIL",
   "displayAdPwdReqEnabled":false,
   "adPwdRequirements":"",
   "oauthClientId":"fff0de39-a4b5-439f-8808-52213fce76b8",
   "companyId":"zyfmj7h41ntp556t"
}


...