Skip to content

OpenID Connect Integration WIP ​

Introduction to OpenID Connect ​

OpenID Connect (OIDC) is an authentication layer built on top of the OAuth 2.0 protocol. It allows clients to verify the identity of the end-user based on the authentication performed by an authorization server, as well as to obtain basic profile information about the end-user in an interoperable and REST-like manner.

OIDC provides a robust mechanism for clients to receive identity assertions from a trusted identity provider (IdP) in a secure and standardized way.

Benefits of OpenID Connect ​

OpenID Connect simplifies the authentication process by providing a framework where information about the end-users can be obtained securely, efficiently, and reliably. It extends OAuth 2.0 with capabilities to:

  • Authenticate Users: Confirm the identity of the users based on the authentication performed by the Authorization Server.
  • Obtain User Information: Securely retrieve user details with the help of ID tokens, which include identity information about the user that has been authenticated.
  • Single Sign-On (SSO): Facilitate SSO by enabling users to log in once and use multiple applications without needing to authenticate again.
  • Standardized Protocol: Leverage a widely adopted standard that ensures compatibility across different systems and platforms.

More Info ​

Check official website: https://openid.net/developers/how-connect-works/

Integration ​

The @hexancore/auth package enhances application security and user management by integrating OpenID Connect, offering several features and benefits:

  • Easy Integration with Identity Providers: @hexancore/auth is designed to seamlessly integrate with OpenID Connect-compliant identity providers (IdPs) such as Auth0, Amazon Cognito, Google, Keycloak. This simplifies the process of setting up secure authentication across different platforms.

  • Enhanced Security: By utilizing OpenID Connect, @hexancore/auth leverages robust, battle-tested protocols to ensure that the identity information provided is from a trusted source.

  • Simplified User Authentication: Developers can implement complex authentication mechanisms easily with high-level abstractions provided by @hexancore/auth, reducing the need for handling lower-level details and thereby decreasing the potential for security vulnerabilities.

  • Scalable Authentication Solution: Whether you are building a small application or a large-scale enterprise system, @hexancore/auth scales to meet your needs without compromising on performance or security.

  • Comprehensive Configuration Options: Customize the authentication flow to suit specific requirements of your application, including adjusting session lifetimes, token refresh mechanisms, and selecting which user profile fields are required.

Test OpenID Connect Provider ​

@hexancore/auth provides simple OIDC provider for testing purpose.

Configure ​

Create provider config in config/dev/test_oidc_provider.yaml

yaml
https: true
clients:
  - client_id: test_client
    flow_type: 'authorization_code'
    redirect_uris:
      - https://localhost:3000/user/protected/auth/login-callback
    post_logout_redirect_uris:
      - https://localhost:3000/user/protected/auth/logout-callback

Run provider with

pnpm hc_auth_test_oidc_provider

HcOpenIdUserModule ​

HcOpenIdUserModule is module tailored specifically for handling user authentication through OpenID Connect with statefull application sessions.

Importing module ​

HcOpenIdUserModule is typically used as a global module in the main application module.

ts
import { HcAppRedisModule, } from '@hexancore/cloud';
import { HcHttpModule, HcModule } from '@hexancore/core';
import {HcOpenIdUserModule,RedisOpenIdSessionStoreProvider} from '@hexancore/auth';

@Global()
@Module({
  imports: [
    HcModule.forRoot({}),
    HcHttpModule,
    HcAppRedisModule,
    HcOpenIdUserModule.forRoot({
      sessionStore: RedisOpenIdSessionStoreProvider(),
    })
  ]
})
class AppModule {
}

Configuring ​

Now let's configure the HcOpenIdUserModule.

Module Options ​

  • sessionStore - Nest provider with SessionStore implementation. There are Predefined stores with providers:
    • RedisOpenIdSessionStoreProvider - provides redis store
    • MemoryOpenIdSessionStoreProvider - provides app in-memory store

Config ​

Rest of configuration is stored in config

yaml
core:
  auth:
    openid:
      user:
        client:
          issuerDiscover: https://localhost:20012/oidc/.well-known/openid-configuration
          clientId: test_client
          defaultMaxAge: 300
        app:
          apiBaseUrl: https://localhost:3000
          session:
            lifetime: 1h
            initialLifetime: 5m
            cookie:
              sameSite: lax
          login:
            scope:
              - openid
              - email
          redirect:
            baseUrl: https://localhost:3000/front/protected/dashboard
            postLogoutUrl: https://localhost:3000/front/public/post-logout
            errorUrl: https://localhost:3000/front/public/auth-error
            loginRequest:
              login_popup: https://localhost:3000/front/user/login-request-redirect

Client Secret ​

OIDC Client secret is stored in standard AppConfig secret: core.auth.openid.user.client

Authenticate flow controller ​

Module provide controller with routes to support user authenticate flow.

Usable Endpoints ​

  • OpenID Connect provider login page redirect: https://<app-api-url>/user/public/auth/login
  • OpenID Connect provider logout page redirect: https://<app-api-url>/user/protected/auth/logout