Skip to content

Authentication configuration

The portal does not provide any authentication mechanism. It requires third-party services to provide authentication. But it has the means to facilitate the integration of such services. If you want to specify the OAuth2 services to be used, you can use the EnvAuthConfigService as a authConfigProvider option, along with providing the environment variable to the portal, according to the instruction.

ts
import { Module } from '@nestjs/common';
import { PortalModule, PortalModuleOptions, EnvAuthConfigService } from '@openmfp/portal-server-lib';

const portalOptions: PortalModuleOptions = {
    authConfigProvider: EnvAuthConfigService
};

@Module({
    imports: [PortalModule.create(portalOptions)],
})
export class AppModule {}

The variables will be read from the environment and used to facilitate the authentication flow.

AuthConfigService Interface

You might want as well to provide your own implementation of the AuthConfigService interface, meeting the requirements below:

ts
export interface ServerAuthVariables {
    idpName?: string;
    baseDomain: string;
    oauthServerUrl: string;
    oauthTokenUrl: string;
    clientId: string;
    clientSecret: string;
    oidcIssuerUrl?: string;
    endSessionUrl?: string;
}

export interface AuthConfigService {
    getAuthConfig(request: Request): Promise<ServerAuthVariables>;
}

Provide your implemented services to the portal options

ts
import { Module } from '@nestjs/common';
import { PortalModule, PortalModuleOptions } from '@openmfp/portal-server-lib';

const portalOptions: PortalModuleOptions = {
    authConfigProvider: AuthConfigServiceImpl
};

@Module({
    imports: [PortalModule.create(portalOptions)],
})
export class AppModule {}

Once implemented, the portal will use your implementation to get the authentication variables.

Authentication callback

You might want as well to provide an authentication callback to act upon different authentication outcomes, failure or success.

ts
export interface AuthCallback {
    handleSuccess(
        request: Request,
        response: Response,
        authTokenResponse: AuthTokenData,
    ): Promise<any>;

    handleFailure(request: Request, response: Response): Promise<any>;
}

And add it to the portal options:

ts
import { Module } from '@nestjs/common';
import { PortalModule, PortalModuleOptions } from '@openmfp/portal-server-lib';

const portalOptions: PortalModuleOptions = {
    authCallbackProvider: AuthCallbackProviderImpl,
};

@Module({
    imports: [PortalModule.create(portalOptions)],
})
export class AppModule {}

Logout callback

By specifying the logoutCallbackProvider option, you can provide a logout callback to be called upon logout.

LogoutCallback interface

ts
export interface LogoutCallback {
    handleLogout(request: Request, response: Response): Promise<string | void>;
}

The logout action redirects to the url specified by the environment variable LOGOUT_REDIRECT_URL, but you can override it according to your needs and logic in the LogoutCallback implementation, and the return value of the callback will be used as the redirect URL.

Provide your implemented services to the portal options

ts
import { Module } from '@nestjs/common';
import { PortalModule, PortalModuleOptions } from '@openmfp/portal-server-lib';

const portalOptions: PortalModuleOptions = {
  logoutCallbackProvider: LogoutCallbackImpl,
};

@Module({
  imports: [PortalModule.create(portalOptions)],
})
export class AppModule {}
EU and German government funding logos

Funded by the European Union – NextGenerationEU.

The views and opinions expressed are solely those of the author(s) and do not necessarily reflect the views of the European Union or the European Commission. Neither the European Union nor the European Commission can be held responsible for them.