- Criado por Wesley Avelino De Carvalho, última alteração por Gabriel Dias De Oliveira Silva em 22 jan, 2019
Índice:
Objetivo:
Realizar a integração de um Produto com o TReports e entender o fluxo da autenticação entre Produto X TReports X Provedor Integrado.
Definições Gerais:
Para exemplificar a integração, será utilizado o projeto TReportsServerClient (https://github.com/totvs/treports-server-client)
O TReports utiliza o Rac para gerenciamento dos usuários e permissões configurados por Tenant.
Recuperando Access Token:
Para realizar a integração do produto com o TReports, é utilizado o Fluxo Resource Owner (password). Este fluxo necessita de um usuário e senha válidos no Tenant configurado para o TReports para que a autenticação seja realizada.
Este usuário precisa conter a permissão de execução de relatório (ExecuteReport).
POST
Host: {Endereço do Rac}/connect/token
Host Ex.: http://localhost/totvs.rac/connect/token
Content-type: application/x-www-form-urlenconded
Authorization: Basic {ClientId:ClientSecret}
grant_type=password
&username=exampleuser
&password=1234luggage
&scope=authorization_api
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx
&acr_values=tenant:treports
Segue em anexo a requisição via Postman: TReports.postman_collection.json
Obs: O ClientId e ClientSecret podem ser passados no Body da requisição ou no Header Authorization codificado para base64 ClientId:ClientSecret
Para mais informações: https://developer.okta.com/blog/2018/06/29/what-is-the-oauth2-password-grant
Autenticação Externa - Rac:
O Tenant pode ser configurado para realizar a autenticação externa, onde a validação do usuário e senha serão realizadas em um endpoint do produto.
Será realizado uma chamada no endpoint do Produto configurado no Tenant do Rac para que o usuário e senha sejam validados pelo Produto, em casso de sucesso, o Access Token é retornado para o Produto.
Executando um relatório:
Com o Access Token gerado, ele deve ser enviado no Header Authorization em todas as requisições da Api do Reports.
Ex. “Authorization: Bearer {access_token}”
O fluxo de toda a execução pode ser visto abaixo:
A seguinte chamada deve ser realizada na api do TReports:
POST
Authorization: Bearer {access_token}
Host: {Endereço do TReports}/api/trep/v1/reports/{UidReports}/execute
Content-type: application/json
... {Consultar o Swagger para obter lista completa de parâmetros}
generateParams: {
...
isView: Boleando para informar se o relatório será visualizado em tela ou não. Para a geração através de API, sempre informar false.
}
UserName: Nome do Usuário que será enviado ao Provedor Integrado para aplicação de segurança.
Custom Data
Foi criada uma propriedade no objeto "GenerateParams" chamada "CustomData".
Trata-se de um propriedade do tipo string que receberá qualquer valor customizado a ser enviado na chamada do endpoint.
O valor enviado na propriedade "CustomData" será adicionado na lista de parâmetros do provedor (ProviderParams) que chegará em todos os endpoints definidos na API de "provedores integrados".
Obs: O objeto "GenerateParams" é usado para enviar informações na chamada do endPoint "/execute" (listado acima) para enviar informações de execução do relatório.
Exemplo:
Usuários do Protheus poderão enviar o "grupo de empresas" nessa propriedade para ser utilizada em filtros localizados nos provedores integrados do Protheus,
Esta requisição gera uma solicitação de execução do relatório, mas não o executa imediatamente. Ele será executado pelo job do TReports. O retorno será um identificador único da requisição de execução (UidRequest)
Para acompanhamento da execução do relatório, execute a seguinte chamada:
GET
Authorization: Bearer {access_token}
Host: {Endereço do TReports}/api/trep/v1/Generateds/{uIdRequest}/info
Content-type: application/json
{Consultar o Swagger para obter lista completa de parâmetros}
Nesta chamada será retornado o identificador da geração do relatório {id} e o status da execução {status} dentre outras informações. Caso o status seja finalizado, podemos realizar a chamada para obter o relatório gerado no formato desejado:
GET
Authorization: Bearer {access_token}
Host: {Endereço do TReports}/api/trep/v1/Generateds/{id}/file
Content-type: application/json
ExportFileType=0 {Consultar o swagger para uma lista completa das opções de arquivo para download}
Será retornado o binário do arquivo gerado no formato solicitado.
Provedor Integrado:
O fluxo completo utilizando provedor integrado pode ser visto abaixo:
O provedor de dados integrado suporta os seguintes tipos de autenticação:
Basic
É informado o usuário e senha para acesso ao provedor de dados. Essa informação será enviada no cabeçalho da requisição como autenticação Basic
OpenID
O Provedor de dados integrado receberá o access_token do TReports. O token contém o usuário logado no sistema, mas para o caso do fluxo Resource Owner sem a autenticação externa configurada, o usuário do token será sempre o usuário criado para realizar o fluxo Resource Owner. Desta forma, foi criado no Header da requisição a propriedade UserName contendo o nome do usuário informado nos parâmetros da requisição do Execute Request (endPoint: /api/trep/v1/reports/{UidReport}/execute). Caso não seja informado o usuário nos parâmetros do Execute Request, o UserName conterá o usuário do Token.
Produto: Framework
Versão: 12.1.22 ou Superiores
Processo: Integração TReports