nest-keycloak-connect
Version:
keycloak-nodejs-connect module for Nest
172 lines (171 loc) • 4.3 kB
TypeScript
import { LogLevel } from '@nestjs/common';
import { PolicyEnforcementMode, RoleMerge, TokenValidation } from '../constants';
export type KeycloakConnectOptions = string | KeycloakConnectConfig;
/**
* Multi tenant configuration.
*/
export interface MultiTenantOptions {
/**
* Option to always resolve the realm and secret. Disabled by default.
*/
resolveAlways?: boolean;
/**
* The realm resolver function.
*/
realmResolver: (request: any) => Promise<string> | string;
/**
* The realm secret resolver function.
*/
realmSecretResolver?: (realm: string, request?: any) => Promise<string> | string;
/**
* The realm auth server url resolver function.
*/
realmAuthServerUrlResolver?: (realm: string, request?: any) => Promise<string> | string;
}
/**
* Library only configuration.
*/
export interface NestKeycloakConfig {
/**
* Cookie key.
*/
cookieKey?: string;
/**
* Log level.
*/
logLevels?: LogLevel[];
/**
* Use the nest logger.
*/
useNestLogger?: boolean;
/**
* Sets the policy enforcement mode for this adapter, defaults to {@link PolicyEnforcementMode.PERMISSIVE}.
*/
policyEnforcement?: PolicyEnforcementMode;
/**
* Sets the token validation method, defaults to {@link TokenValidation.ONLINE}.
*/
tokenValidation?: TokenValidation;
/**
* Multi tenant options.
*/
multiTenant?: MultiTenantOptions;
/**
* Role merging options.
*/
roleMerge?: RoleMerge;
}
/**
* Keycloak Connect options.
* @see {@link https://github.com/keycloak/keycloak-nodejs-connect/blob/f8e011aea5/middleware/auth-utils/config.js}
*/
export interface KeycloakConnectConfig extends NestKeycloakConfig {
/**
* Realm ID.
*/
realm?: string;
/**
* Client/Application ID.
*/
resource?: string;
/**
* Client/Application ID.
* @see {KeycloakConnectOptions#resource}
*/
'client-id'?: string;
/**
* Client/Application ID.
* @see {KeycloakConnectOptions#resource}
*/
clientId?: string;
/**
* Client/Application secret.
*/
credentials?: KeycloakCredentials;
/**
* Client/Application secret.
* @see {KeycloakCredentials#secret}
*/
secret: string;
/**
* If this is a public application or confidential.
* @see {KeycloakConnectOptions#public}
*/
'public-client'?: boolean;
/**
* If this is a public application or confidential.
*/
public?: boolean;
/**
* Authentication server URL.
* @see {KeycloakConnectOptions#authServerUrl}
*/
'auth-server-url'?: string;
/**
* Authentication server URL.
* @see {KeycloakConnectOptions#authServerUrl}
*/
'server-url'?: string;
/**
* Authentication server URL.
* @see {KeycloakConnectOptions#authServerUrl}
*/
serverUrl?: string;
/**
* Authentication server URL.
*/
authServerUrl?: string;
/**
* How many minutes before retrying getting the keys.
* @see {KeycloakConnectOptions#minTimeBetweenJwksRequests}
*/
'min-time-between-jwks-requests'?: number;
/**
* How many minutes before retrying getting the keys.
*/
minTimeBetweenJwksRequests?: number;
/**
* If this is a Bearer Only application.
* @see {KeycloakConnectOptions#bearerOnly}
*/
'bearer-only'?: boolean;
/**
* If this is a Bearer Only application.
*/
bearerOnly?: boolean;
/**
* Formatted public-key.
* @see {KeycloakConnectOptions#realmPublicKey}
*/
'realm-public-key'?: string;
/**
* Formatted public-key.
*/
realmPublicKey?: string;
/**
* Verify token audience.
* @see {KeycloakConnectOptions#verifyTokenAudience}
*/
'verify-token-audience'?: boolean;
/**
* Verify token audience.
*/
verifyTokenAudience?: boolean;
/**
* Confidential port.
*/
'confidential-port'?: string | number;
/**
* Require SSL.
*/
'ssl-required'?: string;
}
/**
* Represents Keycloak credentials.
*/
export interface KeycloakCredentials {
/**
* Client/Application secret.
*/
secret: string;
}