From 42a39ee891e2e07bbed31c5063c4b205f54122e2 Mon Sep 17 00:00:00 2001 From: marcos-silva-rodrigues Date: Tue, 15 Jul 2025 16:21:44 -0300 Subject: [PATCH] FEAT: send user id to refresh token endpoint --- docsfera.json | 8 +-- package-lock.json | 8 +-- package.json | 2 +- src/modules/auth/auth.controller.ts | 5 +- src/modules/auth/auth.service.ts | 4 +- src/modules/auth/dtos/login.ts | 4 +- .../identity-provider.service.ts | 71 +++++++++++-------- 7 files changed, 54 insertions(+), 48 deletions(-) diff --git a/docsfera.json b/docsfera.json index 0bff3cc..a3c2b47 100644 --- a/docsfera.json +++ b/docsfera.json @@ -6388,17 +6388,13 @@ "refreshToken": { "type": "string" }, - "accessToken": { - "type": "string" - }, - "customerName": { + "userId": { "type": "string" } }, "required": [ "refreshToken", - "accessToken", - "customerName" + "userId" ] }, "AuthRefreshAccessTokenRes": { diff --git a/package-lock.json b/package-lock.json index 5067f64..bfc70d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@aws-sdk/client-secrets-manager": "^3.414.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", "@dadosfera/protospack": "2.5.3", - "@dadosfera/protospack-v2": "3.38.0-beta.8", + "@dadosfera/protospack-v2": "3.38.0-beta.9", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", @@ -1407,9 +1407,9 @@ } }, "node_modules/@dadosfera/protospack-v2": { - "version": "3.38.0-beta.8", - "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.38.0-beta.8.tgz", - "integrity": "sha512-8hEJnfFtKKLn7DqvkOi27GpXZkin6PodTvFbQJIplzcsxuurWNmtvWDmNRavm/SYJcotv4kTJkxnCPOKJqYYpA==", + "version": "3.38.0-beta.9", + "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.38.0-beta.9.tgz", + "integrity": "sha512-9rCSI3g/VVysJUoZ7SdaVe+/UOZUC4qwlnKntf7YxVhb5yVGS3D9U/TjLvjI8zVe5gQ3f711GrhXUgrTGYU/2g==", "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.9.3", diff --git a/package.json b/package.json index e142271..9b77603 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@aws-sdk/client-secrets-manager": "^3.414.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", "@dadosfera/protospack": "2.5.3", - "@dadosfera/protospack-v2": "3.38.0-beta.8", + "@dadosfera/protospack-v2": "3.38.0-beta.9", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index 649adf5..4a46d47 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -104,15 +104,14 @@ export class AuthController { @Headers('origin') origin: string, ) { this.logger.info('/auth - RefreshAccessToken'); - const { refreshToken, customerName: customer_name, accessToken } = body; + const { refreshToken, userId } = body; const frontHost = origin.replace(/^https?:\/\//, ''); const metadata = PackTheMetadata({ language, - customer_name, custom_host: frontHost, }); - return this.authClient.refreshAccessToken({ refreshToken, accessToken }, metadata); + return this.authClient.refreshAccessToken({ refreshToken, userId }, metadata); } @ApiInternalOnlyEndpoint() diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts index 38e2a95..8b1b4f2 100644 --- a/src/modules/auth/auth.service.ts +++ b/src/modules/auth/auth.service.ts @@ -74,13 +74,13 @@ export class AuthClientService implements OnModuleInit { } async refreshAccessToken( - { refreshToken, accessToken }: AuthRefreshAccessTokenRequest, + { refreshToken, userId }: AuthRefreshAccessTokenRequest, metadata: Metadata, ) { this.logger.info('RefreshAccessToken'); return lastValueFrom( - this.authService.AuthRefreshAccessToken({ refreshToken, accessToken }, metadata), + this.authService.AuthRefreshAccessToken({ refreshToken, userId }, metadata), ); } diff --git a/src/modules/auth/dtos/login.ts b/src/modules/auth/dtos/login.ts index 34807e3..dc57d54 100644 --- a/src/modules/auth/dtos/login.ts +++ b/src/modules/auth/dtos/login.ts @@ -122,9 +122,7 @@ export class AuthRefreshAccessTokenReq { @ApiProperty() refreshToken: string; @ApiProperty() - accessToken: string; - @ApiProperty() - customerName: string; + userId: string; } export class AuthRefreshAccessTokenRes { @ApiProperty() diff --git a/src/modules/identity-provider/identity-provider.service.ts b/src/modules/identity-provider/identity-provider.service.ts index 22cf673..8e22c43 100644 --- a/src/modules/identity-provider/identity-provider.service.ts +++ b/src/modules/identity-provider/identity-provider.service.ts @@ -1,4 +1,9 @@ -import { BadRequestException, Inject, Injectable, OnModuleInit } from '@nestjs/common'; +import { + BadRequestException, + Inject, + Injectable, + OnModuleInit, +} from '@nestjs/common'; import { DucClient } from '../duc/client.config'; import { ClientGrpc } from '@nestjs/microservices'; import { ProtoServices } from '@dadosfera/protospack-v2/dist/lib/Duc'; @@ -17,7 +22,7 @@ export class IdentityProviderService implements OnModuleInit { private identityProviderService: IdentityProviderProtoService; constructor( @Inject(DucClient.name) private readonly grpcClient: ClientGrpc, - private readonly cacheService: CacheService + private readonly cacheService: CacheService, ) {} onModuleInit() { @@ -41,7 +46,7 @@ export class IdentityProviderService implements OnModuleInit { async loginIdentityProvider(id: string) { const idp = await lastValueFrom( - this.identityProviderService.FindIdentityProvider({ id}), + this.identityProviderService.FindIdentityProvider({ id }), ); const redirectUri = this.getCallbackUrl(); @@ -79,9 +84,9 @@ export class IdentityProviderService implements OnModuleInit { code_challenge, code_challenge_method: 'S256', state, - nonce + nonce, }); - const idpUrl = url + '&identity_provider=' + idp.name + const idpUrl = url + '&identity_provider=' + idp.name; return idpUrl; } @@ -108,34 +113,36 @@ export class IdentityProviderService implements OnModuleInit { client_id: ssoSign.clientId, client_secret: ssoSign.clientSecret, redirect_uris: [callbackUrl], - response_types: ['code'], }); if (ssoSign === null) { throw new BadRequestException('SSO sign-in is expired or not found'); } - const params = client.callbackParams(`${callbackUrl}?code=${code}&state=${state}`); - const tokenSet = await client.callback( - callbackUrl, - params, - { + const params = client.callbackParams( + `${callbackUrl}?code=${code}&state=${state}`, + ); + try { + const tokenSet = await client.callback(callbackUrl, params, { nonce: ssoSign.nonce, code_verifier: ssoSign.codeVerifier, - state: ssoSign.state, - } - ); + state: ssoSign.state + }); - await this.cacheService.delete(ssoSign.state); + await this.cacheService.delete(ssoSign.state); - return await lastValueFrom( - this.identityProviderService.SignInUser({ - accessToken: tokenSet.access_token, - idToken: tokenSet.id_token, - refreshToken: tokenSet.refresh_token, - id: ssoSign.id - }), - ); + return await lastValueFrom( + this.identityProviderService.SignInUser({ + accessToken: tokenSet.access_token, + idToken: tokenSet.id_token, + refreshToken: tokenSet.refresh_token, + id: ssoSign.id, + }), + ); + } catch (error) { + console.log(error); + throw error; + } } async deleteIdentityProvider(id: string, metadata: Metadata) { @@ -144,12 +151,19 @@ export class IdentityProviderService implements OnModuleInit { ); } - async updateIdentityProviders(id: string, body: CreateIdentityProvider, metadata: Metadata) { + async updateIdentityProviders( + id: string, + body: CreateIdentityProvider, + metadata: Metadata, + ) { return await lastValueFrom( - this.identityProviderService.UpdateIdentityProvider({ - id, - ...body, - }, metadata), + this.identityProviderService.UpdateIdentityProvider( + { + id, + ...body, + }, + metadata, + ), ); } @@ -158,5 +172,4 @@ export class IdentityProviderService implements OnModuleInit { this.identityProviderService.GetProviderLinksFromDomain({ frontDomain }), ); } - }