Configurar Autenticação Client Credentials
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: Nos exemplos foi usado localhost isso deverá ser alterado paraPara a urlrealização doda ambiente de testes (Equipe TCEintegração será responsável por enviar as informações do ambiente de testes);
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;
Para configurar a api para usar o Cerberus será necessário um certificado;Foi criada a lib ngx-cerberus para a aplicação front;
Configurando o uso da lib cerberus-client em uma api Java
Adicionamos também uma chave pública, ela está localizada em src/main/resources/certs/public.txt, essa chave é necessária para o Cerberus validar o client;Configurando o arquivo propertiesAdicionamos a configuração para a url do cerberus,cerberus.url =http://localhost:9999(Local onde a aplicação Cerberus está sendo executada);
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
Esse certificado é obrigatório, ele será entregue pela equipe TCE;Esse certificado pode ser armazenado em um arquivo de configuração dentro da API. Ele será usado para validação da assinatura do token.Para validar o certificado será necessário que na api Scala tem a validação se o certificado realmente é válido;Exemplo em Scala que como é feita a validação;
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;
É 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:@tcepb:registry=https://gitlab.tce.pb.gov.br/api/v4/projects/366/packages/npm///gitlab.tce.pb.gov.br/api/v4/projects/366/packages/npm/:_authToken=glpat-TtmvDiG_D7sk59gEH1gf(para ter acesso ao repositório), após a criação desse arquivo, executar o seguinte comandonpm install @tcepb/[email protected];Importante:A lib ngx-cerberus utiliza algumas outras dependências, dentre elas, é utilizada a @auth0/angular-jwt, caso ocorra algum erro com a versão instalada, poderá ser usada a versão "@auth0/angular-jwt": "^2.0.0";Configurando o arquivo environment.tsSerá necessário adicionar as configuracões da url da aplicação Cerberus, o clientID, o clientSecret; (Os valores para essas informações serão passadosdisponibilizado pela equipe doTCE);TCE
Exemplo do arquivo environment.ts
Configurando os parâmetros que serão necessários para o NgxCerberus
clientId- e
NoumarquivoSecret;app.module.tsAntes
serádenecessáriocomeçar,realizarvocêasprecisaconfigurações para o usoreceber dalibequipengx-cerberus;import HTTP_INTERCEPTORS, JwtInterceptor, JwtModule, getToken, NgxCerberusHttpInterceptor, NgxCerberusModule, NgxCerberusService , environment(no exemplo configuramos algumas variáveis necessárias para JwtModule nesse arquivo );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';Configurando os parâmetros necessários para o módulo JwtModule; Será usado o.forRootmétodo deJwtModulepara fornecer um objeto de configuração comTCE os seguintesatributos:Exemplo:
dados:Será necessário informar um objeto de configuração:tokenGetter: esta função é usada para personalizar comoJwtModule eobter 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.
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:
Adicionar ao array deimportso módulo JwtModule, NgxCerberusModule;
-
Client ID Adicionar ao array deprovidersoHTTP_INTERCEPTORS utilizando o JwtInterceptor, NgxCerberusHttpInterceptor e o NgxCerberusService;Exemplo:
Ao concluir essas configurações e executar o projeto, se tudo deu certo, você deverá ser redirecionado para tela de login(Identificador doCerberus;Repositório de exemplo de uma aplicação angular utilizando a lib ngx-cerberus:xxxxxxxxIntegrando um aplicativo mobile ao CerberusRealizando a requisição para obter um code
cliente)-
Observação:ClientosSecretdados(Senhanecessários como endpoint para obtenção de code, token, clientId, clientSecret, usuário e senha de testes deverão ser passados pela equipe de desenvolvedoressecreta dotce.cliente) -
ParaTokenobterURLum Authorization code do Cerberus será necessário realizar uma requisição para o endpoint(http://10.10.5.83:9999/oauth/authorize,token)essa
requisiçãoprecisaAutenticação
serviaapenasClientumCredentialsredirect(OAuth2)Etapas para
esse enpoint;Exemplo da requisição:`http://10.10.5.83:9999/oauth/authorize?response_type=code&client_id=appCarteiraFuncional&redirect_uri=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 efetuarobter ologin no Cerberus será retornado juntamente com a url de retorno(sua url) o code. Com o code de acesso agora é possível obter umtokenjwt;Trocando o code recebido por um token jwtPara obter o token
jwt seráé necessárioenviarfazer uma requisição para aplicação orpovedor de autenticação dotipoTCE (Cerberus), para isso é preciso utilizar os seguintes dados:Monte uma requisição HTTP
POSTpara oCerberustoken_url,nocomendpointos seguintes parâmetros:POST http://10.10.5.83:9999/oauth/token
informando os parâmetros necessários;ParâmetrosHeaders:queContent-Type:deverãoapplication/x-www-form-urlencoded
serpassados:Authorization: Basic <base64(seu_client_id:seu_client_secret)>grant_type(doCorpotipo authorization_code),client_id(fornecido pela equipe do tce),code(recebido nada requisiçãoparagrant_type=client_credentials
client_id=SEU_CLIENT_ID ← se não usar oobterheaderumAuthorization
client_secret=SEU_CLIENT_SECRETcode),redirect_uri(sua url que receberá o retorno do Cerberus);ExemploExemplos da requisição:
constUtilizandoparamso= new HttpParams().set("grant_type", "authorization_code").set("client_id", environment.clientId).set("code", code).set("redirect_uri", "http://127.0.0.1:8100");Curlconstcurlheaders-X=POSTnew 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?token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_codeclient_credentials&client_id=appCarteiraFuncionalSEU_CLIENT_ID&code=CODE_RECEBIDO_AO_EFETUAR_LOGIN_NO_CERBERUS&redirect_uri=http://127.0.0.1:8100`client_secret=SEU_CLIENT_SECRET";Utilizando o Postman
É
Aba Body
É necessário definir uma key grant_type com o valor client_credentials;




