# Integração Cerberus

Como configurar uma aplicação client para usar o Cerberus

# Configurar aplicação client com o Cerberus

Observações:

**Importante:** *Será disponibilizado um ambiente para os testes (Equipe TCE será responsável por enviar as informações necessárias);*

1 - Para realizar os testes descritos nessa documentação será necessário está conectado à uma vpn;

2 - A equipe TCE criará uma client para que seja possível realizar os testes;

1. Para configurar a api para usar o Cerberus será necessário um certificado;
2. Para facilitar a integração da aplicação angular com o Cerberus foi criada a lib ngx-cerberus (não é obrigatório o uso dessa lib, o fluxo de login pode ser implementado );

##### Configurando o uso da chave pública na API

> Obs: É indispensável essa validação para garantir que foi o token foi gerado pelo Cerberus

1. Essa chave pública pode ser armazenada dentro de um arquivo de configuração da API, como por exemplo: src/main/resources/certs/public.txt, essa chave é necessária para validar o token gerado.
2. A chave pública também pode ser consultada através de um endpoint disponibilizado no Cerberus, **exemplo:** http://10.10.5.83:9999/.keys/jwks.json.

Adicionamos a configuração da chave pública, **cert.path = certs\_dev/public.txt**

##### Exemplo da configuração de validação da publicKey em Scala

1. Esse certificado é obrigatório, ele será entregue pela equipe TCE;
2. Esse certificado pode ser armazenado em um arquivo de configuração dentro da API. Ele será usado para validação da assinatura do token.
3. Para validar o certificado será necessário que na api Scala tem a validação se o certificado realmente é válido;
4. Exemplo em Scala que como é feita a validação;  
      
    <span class="confluence-embedded-file-wrapper">[![exemplo_public_key.png](https://docs.tce.pb/uploads/images/gallery/2024-02/scaled-1680-/exemplo-public-key.png)](https://docs.tce.pb/uploads/images/gallery/2024-02/exemplo-public-key.png)</span>

> ##### Obs: Visando facilitar a integração da aplicação angular com o cerberus desenvolvemos a lib ngx-cerberus

##### Configurando o uso da lib ngx-cerberus em uma aplicação angular

Essa lib é responsável por fazer o gerenciamento do usuário na aplicação;

1. É necessário instalar a lib ngx-cerberus, para instalar essa lib é necessário ter na raiz do projeto um arquivo .npmrc com a seguinte configuração: <div><div><div>@tcepb:registry=https://gitlab.tce.pb.gov.br/api/v4/projects/366/packages/npm/</div><div>//gitlab.tce.pb.gov.br/api/v4/projects/366/packages/npm/:_authToken=TOKEN</div></div></div> (para ter acesso ao repositório), após a criação desse arquivo, executar o seguinte comando **npm install @tcepb/ngx-cerberus@0.5.0**;  
    **Importante:** *A lib ngx-cerberus utiliza algumas outras dependências, dentre elas, é utilizada a @auth0/angular-jwt;*
2. **Configurando o arquivo environment.ts**
    1. Será necessário adicionar as configuracões da url da aplicação Cerberus, o clientID, o clientSecret; (Os valores para essas informações serão passados pela equipe do TCE);
    
    **Exemplo do arquivo environment.ts  
      
    [![exemplo_arquivo_environment.png](https://docs.tce.pb/uploads/images/gallery/2024-02/scaled-1680-/exemplo-arquivo-environment.png)](https://docs.tce.pb/uploads/images/gallery/2024-02/exemplo-arquivo-environment.png)
3. **Configurando os parâmetros que serão necessários para o NgxCerberus  
    
    1. No arquivo app.module.ts será necessário realizar as configurações para o uso da lib ngx-cerberus;
    2. import HTTP\_INTERCEPTORS, JwtInterceptor, JwtModule, getToken, NgxCerberusHttpInterceptor, NgxCerberusModule, NgxCerberusService , environment(no exemplo configuramos algumas variáveis necessárias para JwtModule nesse arquivo );
    3. **Exemplo das importações:**   
        import { HTTP\_INTERCEPTORS, HttpClientModule } from '@angular/common/http';  
        import { JwtInterceptor, JwtModule } from '@auth0/angular-jwt';  
        import { environment } from 'src/environments/environment';
        
        import { getToken, NgxCerberusHttpInterceptor, NgxCerberusModule, NgxCerberusService } from '@tcepb/ngx-cerberus';
    4. Configurando os parâmetros necessários para o módulo JwtModule; Será usado o `.forRoot `método de `JwtModule `para fornecer um objeto de configuração com os seguintes atributos:  
        Exemplo:
        
        [![exemplo_app_modules.png](https://docs.tce.pb/uploads/images/gallery/2024-02/scaled-1680-/exemplo-app-modules.png)](https://docs.tce.pb/uploads/images/gallery/2024-02/exemplo-app-modules.png)
        
        Será necessário informar um objeto de configuração:
        
        
        - `tokenGetter`: esta função é usada para personalizar como `JwtModule e `obter o token de acesso JWT do armazenamento local.
        - `whiteListedDomains`: nesta matriz, você pode adicionar qualquer domínio que tenha permissão para receber o JWT como APIs públicas.
        - `blackListedRoutes`: nesta matriz, você pode adicionar rotas que não têm permissão para receber o token JWT.
    5. Configurando o objeto necessário para o módulo NgxCerberusModule:  
        Será necessário informar os seguintes valores para o objeto: clientID, clientSecret, providerURL (essas informações serão passadas pela equipe TCE) ;
        
        Exemplo:
        
        [![exemplo_config_ngx_cerberus_no_module.png](https://docs.tce.pb/uploads/images/gallery/2024-02/scaled-1680-/exemplo-config-ngx-cerberus-no-module.png)](https://docs.tce.pb/uploads/images/gallery/2024-02/exemplo-config-ngx-cerberus-no-module.png)
    6. Adicionar ao array de **imports** o módulo JwtModule, NgxCerberusModule;
    
    
    - 
    - Adicionar ao array de **providers** o HTTP\_INTERCEPTORS utilizando o JwtInterceptor, NgxCerberusHttpInterceptor e o NgxCerberusService;  
        Exemplo:   
        [![exemplo_declarations_module.png](https://docs.tce.pb/uploads/images/gallery/2024-02/scaled-1680-/exemplo-declarations-module.png)](https://docs.tce.pb/uploads/images/gallery/2024-02/exemplo-declarations-module.png)  
          
        Ao concluir essas configurações e executar o projeto, se tudo deu certo, você deverá ser redirecionado para tela de login do Cerberus;  
          
        <span class="confluence-embedded-file-wrapper confluence-embedded-manual-size">[![tela_login_cerberus.png](https://docs.tce.pb/uploads/images/gallery/2024-02/scaled-1680-/tela-login-cerberus.png)](https://docs.tce.pb/uploads/images/gallery/2024-02/tela-login-cerberus.png)</span>  
        ***Repositório de exemplo de uma aplicação angular utilizando a lib ngx-cerberus:*** xxxxxxxx  
          
        ##### Integrando um aplicativo mobile ao Cerberus
        
        **Realizando a requisição para obter um code**
    - **Observação: os dados necessários como endpoint para obtenção de code, token, clientId, clientSecret, usuário e senha de testes deverão ser passados pela equipe de desenvolvedores do tce.**
        
        Para obter um Authorization code do Cerberus será necessário realizar uma requisição para o endpoint [http://10.10.5.83:9999/oauth/authorize,](http://10.10.5.83:9999/oauth/authorize,) essa requisição precisa ser apenas um redirect para esse enpoint;
        
        Exemplo da requisição:
        
        `http://10.10.5.83:9999/oauth/authorize?response\_type=code&amp;client\_id=appCarteiraFuncional&amp;redirect\_uri=[http://127.0.0.1:8100](http://127.0.0.1:8100/)`, essa requisição irá abrir a tela de login do Cerberus com as informações do client que está sendo passado como parâmetro;
        
        Após efetuar o login no Cerberus será retornado juntamente com a url de retorno(sua url) o code. Com o code de acesso agora é possível obter um token jwt;
        
        **Trocando o code recebido por um token jwt**
        
        Para obter o token jwt será necessário enviar uma requisição do tipo POST para o Cerberus no endpoint [http://10.10.5.83:9999/oauth/token](http://10.10.5.83:9999/oauth/token) informando os parâmetros necessários;
        
        Parâmetros que deverão ser passados: **grant\_type**(do tipo authorization\_code), **client\_id**(fornecido pela equipe do tce**)**, **code**(recebido na requisição para o obter um code), **redirect\_uri**(sua url que receberá o retorno do Cerberus);  
        Exemplo da requisição:
        
        const params = new HttpParams()  
        .set("grant\_type", "authorization\_code")  
        .set("client\_id", environment.clientId)  
        .set("code", code)  
        .set("redirect\_uri", "[http://127.0.0.1:8100](http://127.0.0.1:8100/)");
        
        const headers = new HttpHeaders()  
        .set("Content-type", "application/json; charset=utf-8")  
        .set(  
        "Authorization",  
        "Basic " + btoa(environment.clientId + ":" + environment.clientSecret)  
        );
        
        `http://10.10.5.83:9999/oauth/token?grant\_type=authorization\_code&amp;client\_id=appCarteiraFuncional&amp;code=CODE\_RECEBIDO\_AO\_EFETUAR\_LOGIN\_NO\_CERBERUS&amp;redirect\_uri=[http://127.0.0.1:8100](http://127.0.0.1:8100/)`**;**

# Autenticação via Client Credentials (OAuth2)

Observações:

Esse fluxo é utilizado por sistemas, não envolve nenhum login de um usuário comum. Em vez disso, a aplicação usa suas próprias credenciais (client\_id e client\_secret) para se autenticar e obter um token de acesso.

**Importante:** *Para a realização da integração será disponibilizado pela equipe do TCE um **clientId** e um **Secret**;*

Antes de começar, você precisa receber da equipe TCE os seguintes dados:

- **Client ID** (Identificador do cliente)
- **Client Secret** (Senha secreta do cliente)
- **Token URL** (https://login-teste.tce.pb.gov.br/oauth/token)

**Etapas para obter o token**

Para obter o token é necessário fazer uma requisição para provedor de autenticação do TCE (Cerberus), para isso, é preciso utilizar os seguintes dados:

Monte uma requisição HTTP `POST` para o [`token_url`](http://10.10.5.83:9999/oauth/token), com os seguintes parâmetros:

<p class="callout info">**POST** https://login-teste.tce.pb.gov.br/oauth/token</p>

<p class="callout info">**Headers:** Content-Type: application/x-www-form-urlencoded  
 Authorization: Basic &lt;base64(seu\_client\_id:seu\_client\_secret)&gt;</p>

**Exemplos de requisição:**

**Utilizando o Curl**

Será necessário codificar o clientId e o secret em base64 para ser passado no Authorization

Exemplo de como codificar em base64 usando o terminal

echo -n "SEU\_CLIENT\_ID:SEU\_SECRET" | base64

curl -X POST https://login-teste.tce.pb.gov.br/oauth/token -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: Basic SEU\_CLIENT\_ID e SEU\_SECRET codificado em base64" -d "grant\_type=client\_credentials"

**Utilizando o Postman**

**Aba Authorization**

É necessário definir o tipo de Authorization como **Basic Auth**, informar o Username (o clientId) e o Password (o secret);

[![Captura de tela 2025-07-25 082517.png](https://docs.tce.pb/uploads/images/gallery/2025-07/scaled-1680-/captura-de-tela-2025-07-25-082517.png)](https://docs.tce.pb/uploads/images/gallery/2025-07/captura-de-tela-2025-07-25-082517.png)

**Aba Body**

É necessário definir uma key **grant\_type** com o valor client\_credentials;

[![Captura de tela 2025-07-25 082704.png](https://docs.tce.pb/uploads/images/gallery/2025-07/scaled-1680-/captura-de-tela-2025-07-25-082704.png)](https://docs.tce.pb/uploads/images/gallery/2025-07/captura-de-tela-2025-07-25-082704.png)

**Exemplo de retorno caso tudo ocorra com sucesso**

[![Captura de tela 2025-07-25 083525.png](https://docs.tce.pb/uploads/images/gallery/2025-07/scaled-1680-/captura-de-tela-2025-07-25-083525.png)](https://docs.tce.pb/uploads/images/gallery/2025-07/captura-de-tela-2025-07-25-083525.png)