Histórico da Página
...
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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(); |
O 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 | ||
---|---|---|
| ||
eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJmZmYwZGUzOS1hNGI1LTQzOWYtODgwOC01MjIxM2ZjZTc2YjgifQ.aneQAKQ0aO60bUN5WaeG5ZFTb6L4OA_rbO0x5XEV_6pi0bk8B2oW1gegOYtp3TKIRcN1dYr550sX1BnJJgr5WhVQhyiHbGCDDIN_cj2e6uMftqEpc7df900YVm5V-jSQXJLVUJbZb0GlFcuE3Jn3Un6vBoCnziVIcnyG-u-JJ88 |
Enviando/publicando o JWT para o fluig Identity
...
O {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 | ||||
---|---|---|---|---|
| ||||
{ "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 | ||||
---|---|---|---|---|
| ||||
{ "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 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||
|
...