@adatechnology/auth-keycloak 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.js +15132 -0
- package/dist/index.mjs +15128 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +2 -0
- package/dist/src/keycloak.client.d.ts +20 -0
- package/dist/src/keycloak.client.js +140 -0
- package/dist/src/keycloak.http.interceptor.d.ts +11 -0
- package/dist/src/keycloak.http.interceptor.js +39 -0
- package/dist/src/keycloak.interface.d.ts +52 -0
- package/dist/src/keycloak.interface.js +1 -0
- package/dist/src/keycloak.module.d.ts +6 -0
- package/dist/src/keycloak.module.js +40 -0
- package/dist/src/keycloak.token.d.ts +3 -0
- package/dist/src/keycloak.token.js +3 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +26 -0
package/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
## @adatechnology/auth-keycloak
|
|
2
|
+
|
|
3
|
+
Módulo Keycloak para autenticação de clients e usuários, seguindo o padrão do `HttpModule` do monorepo.
|
|
4
|
+
|
|
5
|
+
Este pacote fornece um cliente leve para interagir com o Keycloak (obter/refresh de tokens, introspecção, userinfo)
|
|
6
|
+
e um interceptor opcional. O módulo foi projetado para ser usado junto ao `@adatechnology/http-client`.
|
|
7
|
+
|
|
8
|
+
Principais exportações
|
|
9
|
+
|
|
10
|
+
- `KeycloakModule` — módulo principal. Suporta `KeycloakModule.forRoot(config?)` (padrão dinâmico).
|
|
11
|
+
- `KEYCLOAK_CLIENT` — provider token para injetar o cliente Keycloak (use `@Inject(KEYCLOAK_CLIENT)`).
|
|
12
|
+
- `KEYCLOAK_HTTP_INTERCEPTOR` — provider token para injetar o interceptor (se necessário).
|
|
13
|
+
|
|
14
|
+
Instalação
|
|
15
|
+
|
|
16
|
+
Este pacote já declara dependência interna de workspace para `@adatechnology/http-client`. Em um monorepo PNPM/Turbo o pacote é resolvido automaticamente.
|
|
17
|
+
|
|
18
|
+
Uso
|
|
19
|
+
|
|
20
|
+
- Configuração via código (recomendado quando quiser injetar configuração manualmente):
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { Module } from "@nestjs/common";
|
|
24
|
+
import { HttpModule } from "@adatechnology/http-client";
|
|
25
|
+
import { KeycloakModule } from "@adatechnology/auth-keycloak";
|
|
26
|
+
|
|
27
|
+
@Module({
|
|
28
|
+
imports: [
|
|
29
|
+
HttpModule.forRoot({ baseURL: "https://pokeapi.co/api/v2", timeout: 5000 }),
|
|
30
|
+
KeycloakModule.forRoot({
|
|
31
|
+
baseUrl: "https://keycloak.example.com",
|
|
32
|
+
realm: "BACKEND",
|
|
33
|
+
credentials: {
|
|
34
|
+
clientId: "backend-api",
|
|
35
|
+
clientSecret: "backend-api-secret",
|
|
36
|
+
grantType: "client_credentials",
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
})
|
|
41
|
+
export class AppModule {}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- Configuração via `ConfigService` / variáveis de ambiente (padrão quando não passar `forRoot`):
|
|
45
|
+
|
|
46
|
+
As variáveis usadas pelo módulo interno são:
|
|
47
|
+
|
|
48
|
+
- `KEYCLOAK_BASE_URL` (padrão: `http://localhost:8081`)
|
|
49
|
+
- `KEYCLOAK_REALM` (padrão: `BACKEND`)
|
|
50
|
+
- `KEYCLOAK_CLIENT_ID` (padrão: `backend-api`)
|
|
51
|
+
- `KEYCLOAK_CLIENT_SECRET` (padrão: `backend-api-secret`)
|
|
52
|
+
|
|
53
|
+
API rápida (via token)
|
|
54
|
+
|
|
55
|
+
- `KEYCLOAK_CLIENT.getAccessToken()` — obtém token com cache e deduplicação de requisições.
|
|
56
|
+
- `KEYCLOAK_CLIENT.refreshToken(refreshToken)` — renova token.
|
|
57
|
+
- `KEYCLOAK_CLIENT.validateToken(token)` — introspecção no Keycloak.
|
|
58
|
+
- `KEYCLOAK_CLIENT.getUserInfo(token)` — retorna userinfo.
|
|
59
|
+
|
|
60
|
+
Exemplo de injeção no NestJS:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
import { Inject } from '@nestjs/common';
|
|
64
|
+
import { KEYCLOAK_CLIENT } from '@adatechnology/auth-keycloak';
|
|
65
|
+
import type { KeycloakClientInterface } from '@adatechnology/auth-keycloak';
|
|
66
|
+
|
|
67
|
+
constructor(@Inject(KEYCLOAK_CLIENT) private readonly keycloakClient: KeycloakClientInterface) {}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Notas
|
|
71
|
+
|
|
72
|
+
- Este módulo depende de `@adatechnology/http-client` (provider `HTTP_PROVIDER`) para realizar chamadas HTTP ao Keycloak. Configure o `HttpModule` conforme necessário na aplicação que consome este pacote.
|
|
73
|
+
- O interceptor `KeycloakHttpInterceptor` é fornecido caso queira integrar com outras camadas que aceitem interceptors.
|
|
74
|
+
|
|
75
|
+
Contribuições
|
|
76
|
+
|
|
77
|
+
Relate issues/PRs no repositório principal. Mantenha compatibilidade com o padrão usado pelo `HttpModule`.
|
|
78
|
+
|
|
79
|
+
Licença
|
|
80
|
+
|
|
81
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { AxiosRequestConfig, AxiosInstance } from 'axios';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Keycloak token response
|
|
6
|
+
*/
|
|
7
|
+
interface KeycloakTokenResponse {
|
|
8
|
+
access_token: string;
|
|
9
|
+
expires_in: number;
|
|
10
|
+
refresh_expires_in: number;
|
|
11
|
+
refresh_token: string;
|
|
12
|
+
token_type: string;
|
|
13
|
+
'not-before-policy': number;
|
|
14
|
+
session_state: string;
|
|
15
|
+
scope: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Keycloak client credentials
|
|
19
|
+
*/
|
|
20
|
+
interface KeycloakCredentials {
|
|
21
|
+
clientId: string;
|
|
22
|
+
clientSecret: string;
|
|
23
|
+
username?: string;
|
|
24
|
+
password?: string;
|
|
25
|
+
grantType: 'client_credentials' | 'password';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Keycloak configuration
|
|
29
|
+
*/
|
|
30
|
+
interface KeycloakConfig {
|
|
31
|
+
baseUrl: string;
|
|
32
|
+
realm: string;
|
|
33
|
+
credentials: KeycloakCredentials;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Keycloak client interface
|
|
37
|
+
*/
|
|
38
|
+
interface KeycloakClientInterface {
|
|
39
|
+
/**
|
|
40
|
+
* Get access token
|
|
41
|
+
*/
|
|
42
|
+
getAccessToken(): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Refresh access token
|
|
45
|
+
*/
|
|
46
|
+
refreshToken(refreshToken: string): Promise<KeycloakTokenResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Validate token
|
|
49
|
+
*/
|
|
50
|
+
validateToken(token: string): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Get user info
|
|
53
|
+
*/
|
|
54
|
+
getUserInfo(token: string): Promise<any>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
declare class KeycloakModule {
|
|
58
|
+
static forRoot(config: KeycloakConfig, httpConfig?: AxiosRequestConfig | AxiosInstance): DynamicModule;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
declare const KEYCLOAK_CONFIG = "KEYCLOAK_CONFIG";
|
|
62
|
+
declare const KEYCLOAK_CLIENT = "KEYCLOAK_CLIENT";
|
|
63
|
+
declare const KEYCLOAK_HTTP_INTERCEPTOR = "KEYCLOAK_HTTP_INTERCEPTOR";
|
|
64
|
+
|
|
65
|
+
export { KEYCLOAK_CLIENT, KEYCLOAK_CONFIG, KEYCLOAK_HTTP_INTERCEPTOR, KeycloakClientInterface, KeycloakConfig, KeycloakModule, KeycloakTokenResponse };
|