Search code examples
dockerdocker-composenext.jskeycloaknext-auth

Authenticate nextjs with keycloak using next-auth and docker


I am trying to authenticate NextJS app with Keycloak using NextAuth in a docker. I have tried several options but keeps getting this error

frontend-1  | [next-auth][error][SIGNIN_OAUTH_ERROR] 
frontend-1  | https://next-auth.js.org/errors#signin_oauth_error connect ECONNREFUSED 127.0.0.1:443 {
frontend-1  |   error: {
frontend-1  |     message: 'connect ECONNREFUSED 127.0.0.1:443',
frontend-1  |     stack: 'Error: connect ECONNREFUSED 127.0.0.1:443\n' +
frontend-1  |       '    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)',
frontend-1  |     name: 'Error'
frontend-1  |   },
frontend-1  |   providerId: 'keycloak',
frontend-1  |   message: 'connect ECONNREFUSED 127.0.0.1:443'
frontend-1  | }

This setup works perfectly when run locally without docker and authentication successfully redirects to the login form of keycloak. This issue is just with the docker setup.

And here is my docker-compose.yml

version: "3.9"

services:
  traefik:
    image: docker.io/traefik
    command:
      - --api.insecure=true
      - --providers.docker
      - --entrypoints.web.address=:80
      - --entrypoints.web-secure.address=:443
    ports:
      - "127.0.0.1:8080:8080"
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  keycloak:
    image: quay.io/keycloak/keycloak:20.0.3
    restart: always
    command:
      - start
      - --import-realm
    environment:
      KC_PROXY_ADDRESS_FORWARDING: "true"
      KC_HOSTNAME_STRICT: "false"
      KC_HOSTNAME: auth.example.com
      KC_PROXY: edge
      KC_HTTP_ENABLED: "true"
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://postgres:5432/db?ssl=allow
      KC_DB_USERNAME: postgres
      KC_DB_PASSWORD: postgres
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
    labels:
      - "traefik.http.routers.keycloak.rule=Host(`auth.example.com`)"
      - "traefik.http.routers.cloud-network-keycloak.rule=Host(`auth.example.com`)"
      - "traefik.http.routers.cloud-network-keycloak.tls=true"
      - "traefik.http.services.cloud-network-keycloak.loadbalancer.server.port=8080"
    volumes:
      - ./realm-export.json:/opt/keycloak/data/import/realm.json

  frontend:
    image: ericus20/et-transit-frontend
    build:
      context: ./frontend
      target: RUNNER
    volumes:
      - .:/app
      - /app/node_modules
    command: yarn --cwd frontend dev
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: development
      NEXTAUTH_URL: http://localhost:3000
      NEXTAUTH_URL_INTERNAL: http://frontend:3000
      KEYCLOAK_ISSUER: https://auth.example.com/realms/realm-name

  postgres:
    image: docker.io/postgres:alpine
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: db

I've also tried using the

keycloak KEYCLOAK_ISSUER: https://keycloak:8080/realms/realm-name

Any help is greatly appreciated. And if possible a working example is much appreciated.

I'm using NextJS 13

Solution

  • Finally resolved this issue after a long time and troubleshooting.

    I updated the KeycloakProvider as such...

     KeycloakProvider({
      wellKnown: undefined,
      jwks_endpoint: process.env.JWK_SET_URI,
      clientId: process.env.KEYCLOAK_ID,
      clientSecret: process.env.KEYCLOAK_SECRET,
      issuer: process.env.KEYCLOAK_ISSUER,
      authorization: {
        params: {
          scope: "openid email profile",
        },
        url: `${process.env.KEYCLOAK_ISSUER}/protocol/openid-connect/auth`,
      },
      token: `${process.env.KEYCLOAK_AUTH_SERVER_URL}/realms/et-transit/protocol/openid-connect/token`,
      userinfo: `${process.env.KEYCLOAK_AUTH_SERVER_URL}/realms/et-transit/protocol/openid-connect/userinfo`,
    }),
    

    Then with docker-compose of the frontend defined as...

    frontend:
      image: ericus20/et-transit-frontend
      build:
        context: ./frontend
        target: RUNNER
      volumes:
        - .:/app
        - /app/node_modules
      command: yarn --cwd frontend dev
      ports:
        - "3000:3000"
      depends_on:
        - api
      environment:
        NODE_ENV: development
        NEXTAUTH_URL: http://localhost:3000
        NEXTAUTH_URL_INTERNAL: http://frontend:3000
        KEYCLOAK_AUTH_SERVER_URL: http://keycloak:8080
        JWK_SET_URI: http://keycloak:8080/realms/et-transit/protocol/openid-connect/certs
      networks:
        - frontend-network
    

    With the keycloak serivce defined as...

    keycloak:
      image: quay.io/keycloak/keycloak:latest
      environment:
        DB: postgres
        HOSTNAME: localhost
        DB_URL: jdbc:postgresql://keycloak-db:5432/et-transit
        DB_USERNAME: postgres
        DB_PASSWORD: postgres
        KEYCLOAK_ADMIN: admin
        KEYCLOAK_ADMIN_PASSWORD: password
        KEYCLOAK_LOGLEVEL: INFO
        ROOT_LOGLEVEL: INFO
      ports:
        - "8181:8080"
        - "8787:8787"
      command:
        - start-dev
        - --import-realm
      volumes:
        - ./api/src/main/resources/keycloak/realm-export.json:/opt/keycloak/data/import/realm.json
      depends_on:
        - keycloak-db
      networks:
        - keycloak-network
        - frontend-network
    

    And the .env contains...

    KEYCLOAK_ISSUER=http://localhost:8181/realms/et-transit
    
    KEYCLOAK_AUTH_SERVER_URL=http://localhost:8181
    
    JWK_SET_URI=http://localhost:8181/realms/et-transit/protocol/openid-connect/certs
    

    Output of a successful authentication in container with debug on produces...

    [next-auth][debug][CREATE_STATE] { value: 'PChNcsJeSoWHBA1qtdNRjggF2ZZ8VF0fW5c65B_93LU', maxAge: 900 }
    2023-11-28T22:55:58.633219380Z [next-auth][debug][CREATE_PKCECODEVERIFIER] { value: 'O1qv7kDk9QTEBhPsKFF9x99n0YAsSgUluvvwW07f410', maxAge: 900 }
    2023-11-28T22:55:58.636170255Z [next-auth][debug][GET_AUTHORIZATION_URL] {
    2023-11-28T22:55:58.636209588Z   url: 'http://localhost:8181/realms/et-transit/protocol/openid-connect/auth?client_id=et-transit-frontend&scope=openid%20email%20profile&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fcallback%2Fkeycloak&state=PChNcsJeSoWHBA1qtdNRjggF2ZZ8VF0fW5c65B_93LU&code_challenge=blC1_KQn31CtMVrlPhmCPPLt6zoSMN5IGlACSTslZys&code_challenge_method=S256',
    2023-11-28T22:55:58.636215047Z   cookies: [
    2023-11-28T22:55:58.636216838Z     {
    2023-11-28T22:55:58.636218505Z       name: 'next-auth.state',
    2023-11-28T22:55:58.636220380Z       value: 'eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..7Emf2hDyyJkDWyZ9.uBFpJhk0E8i6dncqK6MTsjwYO55BktpMorbHy-CBgsrAb77b2s3mLoJoRgXD7JmEIZ3VKoTx_fLQUGP0H93YOwoTFz0KKlrXdKg-ArIdCjHjipLtajRPxlTkdgqx5FiDixtZ5kFINLqKDo0eupKqbWrWin6y4CDql3wXnJpX14t6WCUlsy4.ypi9WyqaahzqVleAC6Ff6g',
    2023-11-28T22:55:58.636222505Z       options: [Object]
    2023-11-28T22:55:58.636224172Z     },
    2023-11-28T22:55:58.636225713Z     {
    2023-11-28T22:55:58.636227505Z       name: 'next-auth.pkce.code_verifier',
    2023-11-28T22:55:58.636229338Z       value: 'eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..7cJXFD1dwaXg1GxR.zC9OXn2m7x5Ga2qbVW8LdcLqifh7Gt9X6YXq1AWCyAvVrf39N7y01DICEroN1BkZMsqcVzMZzdoVzp7dr0H8mGBqbhCkLtvulJqDXBezYAsu6JfSlJkgJobes9wuHxi8XSZIZEWmE8ts2oaeFtIzv3KflofhTFcKOMlFfpcKQ3ponCjdpLQ.tljgpl0gMEvvapieDaqWkA',
    2023-11-28T22:55:58.636231463Z       options: [Object]
    2023-11-28T22:55:58.636233047Z     }
    2023-11-28T22:55:58.636234630Z   ],
    2023-11-28T22:55:58.636236213Z   provider: {
    2023-11-28T22:55:58.636237922Z     id: 'keycloak',
    2023-11-28T22:55:58.636240088Z     name: 'Keycloak',
    2023-11-28T22:55:58.636241713Z     wellKnown: undefined,
    2023-11-28T22:55:58.636243380Z     type: 'oauth',
    2023-11-28T22:55:58.636247297Z     authorization: {
    2023-11-28T22:55:58.636250588Z       params: [Object],
    2023-11-28T22:55:58.636252297Z       url: 'http://localhost:8181/realms/et-transit/protocol/openid-connect/auth'
    2023-11-28T22:55:58.636254255Z     },
    2023-11-28T22:55:58.636255838Z     checks: [ 'pkce', 'state' ],
    2023-11-28T22:55:58.636257463Z     idToken: true,
    2023-11-28T22:55:58.636259130Z     profile: [Function: profile],
    2023-11-28T22:55:58.636260797Z     style: { logo: '/keycloak.svg', bg: '#fff', text: '#000' },
    2023-11-28T22:55:58.636322713Z     jwks_endpoint: 'http://keycloak:8080/realms/et-transit/protocol/openid-connect/certs',
    2023-11-28T22:55:58.636326297Z     clientId: 'et-transit-frontend',
    2023-11-28T22:55:58.636328213Z     clientSecret: 'secret',
    2023-11-28T22:55:58.636330172Z     issuer: 'http://localhost:8181/realms/et-transit',
    2023-11-28T22:55:58.636334838Z     token: {
    2023-11-28T22:55:58.636337630Z       url: 'http://keycloak:8080/realms/et-transit/protocol/openid-connect/token',
    2023-11-28T22:55:58.636339963Z       params: {}
    2023-11-28T22:55:58.636351213Z     },
    2023-11-28T22:55:58.636353172Z     userinfo: {
    2023-11-28T22:55:58.636354880Z       url: 'http://keycloak:8080/realms/et-transit/protocol/openid-connect/userinfo',
    2023-11-28T22:55:58.636356588Z       params: {}
    2023-11-28T22:55:58.636358172Z     },
    2023-11-28T22:55:58.636359797Z     signinUrl: 'http://localhost:3000/api/auth/signin/keycloak',
    2023-11-28T22:55:58.636362838Z     callbackUrl: 'http://localhost:3000/api/auth/callback/keycloak'
    2023-11-28T22:55:58.636364672Z   }
    2023-11-28T22:55:58.636366463Z }
    2023-11-28T22:56:02.528048757Z [next-auth][debug][PROFILE_DATA] {
    2023-11-28T22:56:02.528517757Z   OAuthProfile: {
    2023-11-28T22:56:02.528527549Z     exp: 1701212222,
    2023-11-28T22:56:02.528531507Z     iat: 1701212162,
    2023-11-28T22:56:02.528533424Z     auth_time: 1701212162,
    2023-11-28T22:56:02.528535840Z     jti: '61592f69-4026-4fbc-ae68-dfe582f375e3',
    2023-11-28T22:56:02.528544965Z     iss: 'http://localhost:8181/realms/et-transit',
    2023-11-28T22:56:02.528550965Z     aud: 'et-transit-frontend',
    2023-11-28T22:56:02.528554049Z     sub: '4e591efa-48e6-4983-91b3-a0a52d2af0f3',
    2023-11-28T22:56:02.528556049Z     typ: 'ID',
    2023-11-28T22:56:02.528558049Z     azp: 'et-transit-frontend',
    2023-11-28T22:56:02.528559757Z     session_state: 'd62b4897-e5ec-4251-b6ae-493e08eb4a3d',
    2023-11-28T22:56:02.528562174Z     at_hash: 'YiwNEiylIznq_CUCdPRsGw',
    2023-11-28T22:56:02.528564132Z     acr: '1',
    2023-11-28T22:56:02.528565840Z     sid: 'd62b4897-e5ec-4251-b6ae-493e08eb4a3d',
    2023-11-28T22:56:02.528567715Z     email_verified: true,
    2023-11-28T22:56:02.528570090Z     name: 'John Doe',
    2023-11-28T22:56:02.528571882Z     preferred_username: 'admin',
    2023-11-28T22:56:02.528573632Z     given_name: 'John',
    2023-11-28T22:56:02.528575299Z     family_name: 'Doe',
    2023-11-28T22:56:02.528577507Z     email: '[email protected]'
    2023-11-28T22:56:02.528583132Z   }
    2023-11-28T22:56:02.528585674Z }
    2023-11-28T22:56:02.528628840Z [next-auth][debug][OAUTH_CALLBACK_RESPONSE] {
    2023-11-28T22:56:02.528637299Z   profile: {
    2023-11-28T22:56:02.528639757Z     id: '4e591efa-48e6-4983-91b3-a0a52d2af0f3',
    2023-11-28T22:56:02.528641549Z     name: 'John Doe',
    2023-11-28T22:56:02.528645257Z     email: '[email protected]',
    2023-11-28T22:56:02.528646965Z     image: undefined
    2023-11-28T22:56:02.528650299Z   },
    2023-11-28T22:56:02.528652507Z   account: {
    2023-11-28T22:56:02.528654382Z     provider: 'keycloak',
    2023-11-28T22:56:02.528656049Z     type: 'oauth',
    2023-11-28T22:56:02.528660340Z     providerAccountId: '4e591efa-48e6-4983-91b3-a0a52d2af0f3',
    2023-11-28T22:56:02.528709715Z     access_token: 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0dTl0WXdhZXllT25JY0lybDQzc0lsUXVBUmhpWlg1ZjN3a0JJbmtsckh3In0.eyJleHAiOjE3MDEyMTIyMjIsImlhdCI6MTcwMTIxMjE2MiwiYXV0aF90aW1lIjoxNzAxMjEyMTYyLCJqdGkiOiI1NzczNGU4ZS1kMTk3LTQwOWEtOTUzZC1mMmM2ZjMxZjllODYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgxODEvcmVhbG1zL2V0LXRyYW5zaXQiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImV0LXRyYW5zaXQtYXBpIiwiYWNjb3VudCJdLCJzdWIiOiI0ZTU5MWVmYS00OGU2LTQ5ODMtOTFiMy1hMGE1MmQyYWYwZjMiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJldC10cmFuc2l0LWZyb250ZW5kIiwic2Vzc2lvbl9zdGF0ZSI6ImQ2MmI0ODk3LWU1ZWMtNDI1MS1iNmFlLTQ5M2UwOGViNGEzZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzAuMC4wLjA6MzAwMCIsImh0dHA6Ly9kZXYuZXR0cmFuc2l0LmNvbSIsImh0dHBzOi8vZXR0cmFuc2l0LmNvbSIsImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMCJdLCJyZXNvdXJjZV9hY2Nlc3MiOnsicmVhbG0tbWFuYWdlbWVudCI6eyJyb2xlcyI6WyJ2aWV3LWlkZW50aXR5LXByb3ZpZGVycyIsInZpZXctcmVhbG0iLCJtYW5hZ2UtaWRlbnRpdHktcHJvdmlkZXJzIiwiaW1wZXJzb25hdGlvbiIsInJlYWxtLWFkbWluIiwiY3JlYXRlLWNsaWVudCIsIm1hbmFnZS11c2VycyIsInF1ZXJ5LXJlYWxtcyIsInZpZXctYXV0aG9yaXphdGlvbiIsInF1ZXJ5LWNsaWVudHMiLCJxdWVyeS11c2VycyIsIm1hbmFnZS1ldmVudHMiLCJtYW5hZ2UtcmVhbG0iLCJ2aWV3LWV2ZW50cyIsInZpZXctdXNlcnMiLCJ2aWV3LWNsaWVudHMiLCJtYW5hZ2UtYXV0aG9yaXphdGlvbiIsIm1hbmFnZS1jbGllbnRzIiwicXVlcnktZ3JvdXBzIl19LCJldC10cmFuc2l0LWFwaSI6eyJyb2xlcyI6WyJBRE1JTiJdfSwiZXQtdHJhbnNpdC1mcm9udGVuZCI6eyJyb2xlcyI6WyJBRE1JTiJdfSwiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcm9sZXMgcHJvZmlsZSIsInNpZCI6ImQ2MmI0ODk3LWU1ZWMtNDI1MS1iNmFlLTQ5M2UwOGViNGEzZCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiSm9obiBEb2UiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImdpdmVuX25hbWUiOiJKb2huIiwiZmFtaWx5X25hbWUiOiJEb2UiLCJlbWFpbCI6ImFkbWluQGV0dHJhbnNpdC5jb20ifQ.jbu1R6Mlt0b5H3UXer40UJE-rUqx0j8tbKrfIwtGZ6Sp8xbNkChuX56oog_dVN2DThRNYG4Auq2Vp6hZnkzB9CGdIlbpLPWZjmnh9DczeUbfeujqDpioVCF3fojA96XdfWxXylqhOolpSiYHy2E8rhbmO_604sEoO3iqf8mOTyJIHdI5dQ_hTj7Vgp48z4zJ31jr6kNQtlwvJdj31DfTIf1oBGRDDjFG7OREepj5I4d_IDO7eZ0KldAVkV1xOtRe-maeKwqQtoBclIXbUD6GgLWCZo3Cic3vRs3gHiovEwg7BM2XEReehblbj8b_gK2CryHVeH4NLGS77tjDu-E5jg',
    2023-11-28T22:56:02.528741965Z     expires_at: 1701212222,
    2023-11-28T22:56:02.528745424Z     refresh_expires_in: 1800,
    2023-11-28T22:56:02.528750215Z     refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJjNGNmZmI2NS04MzA1LTRjNDYtOGM5MS1kNWJlNTRmYjM4NzMifQ.eyJleHAiOjE3MDEyMTM5NjIsImlhdCI6MTcwMTIxMjE2MiwianRpIjoiYTc1Y2M2ZGItYjk0OC00ZThiLTg0MzMtZGI0NThiMDVhYTg0IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MTgxL3JlYWxtcy9ldC10cmFuc2l0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MTgxL3JlYWxtcy9ldC10cmFuc2l0Iiwic3ViIjoiNGU1OTFlZmEtNDhlNi00OTgzLTkxYjMtYTBhNTJkMmFmMGYzIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6ImV0LXRyYW5zaXQtZnJvbnRlbmQiLCJzZXNzaW9uX3N0YXRlIjoiZDYyYjQ4OTctZTVlYy00MjUxLWI2YWUtNDkzZTA4ZWI0YTNkIiwic2NvcGUiOiJvcGVuaWQgZW1haWwgcm9sZXMgcHJvZmlsZSIsInNpZCI6ImQ2MmI0ODk3LWU1ZWMtNDI1MS1iNmFlLTQ5M2UwOGViNGEzZCJ9.K5jUivfzVVLiNgjRBDU5b4hOEbX2A7Kh-Hiavx1-_Vo',
    2023-11-28T22:56:02.528764132Z     token_type: 'Bearer',
    2023-11-28T22:56:02.528790882Z     id_token: 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0dTl0WXdhZXllT25JY0lybDQzc0lsUXVBUmhpWlg1ZjN3a0JJbmtsckh3In0.eyJleHAiOjE3MDEyMTIyMjIsImlhdCI6MTcwMTIxMjE2MiwiYXV0aF90aW1lIjoxNzAxMjEyMTYyLCJqdGkiOiI2MTU5MmY2OS00MDI2LTRmYmMtYWU2OC1kZmU1ODJmMzc1ZTMiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgxODEvcmVhbG1zL2V0LXRyYW5zaXQiLCJhdWQiOiJldC10cmFuc2l0LWZyb250ZW5kIiwic3ViIjoiNGU1OTFlZmEtNDhlNi00OTgzLTkxYjMtYTBhNTJkMmFmMGYzIiwidHlwIjoiSUQiLCJhenAiOiJldC10cmFuc2l0LWZyb250ZW5kIiwic2Vzc2lvbl9zdGF0ZSI6ImQ2MmI0ODk3LWU1ZWMtNDI1MS1iNmFlLTQ5M2UwOGViNGEzZCIsImF0X2hhc2giOiJZaXdORWl5bEl6bnFfQ1VDZFBSc0d3IiwiYWNyIjoiMSIsInNpZCI6ImQ2MmI0ODk3LWU1ZWMtNDI1MS1iNmFlLTQ5M2UwOGViNGEzZCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiSm9obiBEb2UiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImdpdmVuX25hbWUiOiJKb2huIiwiZmFtaWx5X25hbWUiOiJEb2UiLCJlbWFpbCI6ImFkbWluQGV0dHJhbnNpdC5jb20ifQ.QM3A4gVlHjHb1O8iXKxZ9-ID3hmIRfxvHlqlQ95URDOGnqf_TIlVHi44r3b3KR0nG5rVkDQlXzyDzI6R5pqypU0GWcM2ArxHTjzmvrZ4Z19ekq-Z2Oxj9eL4czQOpsDZKGthdrFV9ec_ipRdyyh1oGtxsHDr7rsuSYjXJh49_vaejdHwj2r0_7TFtvWurhLoJ7tdMzbKY-7LdhIKb8f2TAgQYpKPNEHJcsrRNapVScnEDzPB2QHdrw8imlvV5NIG_HYfmww88LP_ncgOXNpmQX3aS_n7o9wPqIbrDtdAZDfx4gfKRIQ26xUlch1D50oXPNCiqek2g3rQqkvGM8KGDQ',
    2023-11-28T22:56:02.528800382Z     'not-before-policy': 0,
    2023-11-28T22:56:02.528815549Z     session_state: 'd62b4897-e5ec-4251-b6ae-493e08eb4a3d',
    2023-11-28T22:56:02.528819299Z     scope: 'openid email roles profile'
    2023-11-28T22:56:02.528824299Z   },
    2023-11-28T22:56:02.528831590Z   OAuthProfile: {
    2023-11-28T22:56:02.528837257Z     exp: 1701212222,
    2023-11-28T22:56:02.528838882Z     iat: 1701212162,
    2023-11-28T22:56:02.528840674Z     auth_time: 1701212162,
    2023-11-28T22:56:02.528845965Z     jti: '61592f69-4026-4fbc-ae68-dfe582f375e3',
    2023-11-28T22:56:02.528847674Z     iss: 'http://localhost:8181/realms/et-transit',
    2023-11-28T22:56:02.528849299Z     aud: 'et-transit-frontend',
    2023-11-28T22:56:02.528851382Z     sub: '4e591efa-48e6-4983-91b3-a0a52d2af0f3',
    2023-11-28T22:56:02.528853132Z     typ: 'ID',
    2023-11-28T22:56:02.528854757Z     azp: 'et-transit-frontend',
    2023-11-28T22:56:02.528856424Z     session_state: 'd62b4897-e5ec-4251-b6ae-493e08eb4a3d',
    2023-11-28T22:56:02.528858090Z     at_hash: 'YiwNEiylIznq_CUCdPRsGw',
    2023-11-28T22:56:02.528860174Z     acr: '1',
    2023-11-28T22:56:02.528861799Z     sid: 'd62b4897-e5ec-4251-b6ae-493e08eb4a3d',
    2023-11-28T22:56:02.528863424Z     email_verified: true,
    2023-11-28T22:56:02.528865007Z     name: 'John Doe',
    2023-11-28T22:56:02.528866590Z     preferred_username: 'admin',
    2023-11-28T22:56:02.528868257Z     given_name: 'John',
    2023-11-28T22:56:02.528870132Z     family_name: 'Doe',
    2023-11-28T22:56:02.528871840Z     email: '[email protected]'
    2023-11-28T22:56:02.528873507Z   }
    2023-11-28T22:56:02.528875049Z }
    2023-11-28T22:56:02.532878382Z [next-auth][debug][CHUNKING_SESSION_COOKIE] {
    2023-11-28T22:56:02.532903090Z   message: 'Session cookie exceeds allowed 4096 bytes.',
    2023-11-28T22:56:02.532906299Z   emptyCookieSize: 163,
    2023-11-28T22:56:02.532908257Z   valueSize: 5873,
    2023-11-28T22:56:02.532909882Z   chunks: [ 4096, 2103 ]
    2023-11-28T22:56:02.532912799Z }
    2023-11-28T22:56:03.807989716Z {"level":"info","message":"Returning current token..."}
    2023-11-28T22:56:03.816341133Z [next-auth][debug][CHUNKING_SESSION_COOKIE] {
    2023-11-28T22:56:03.816584049Z   message: 'Session cookie exceeds allowed 4096 bytes.',
    2023-11-28T22:56:03.816598591Z   emptyCookieSize: 163,
    2023-11-28T22:56:03.816604883Z   valueSize: 5873,
    2023-11-28T22:56:03.816607424Z   chunks: [ 4096, 2103 ]
    2023-11-28T22:56:03.816611383Z }
    2023-11-28T22:56:03.894951508Z {"level":"info","message":"Returning current token..."}
    2023-11-28T22:56:03.899822174Z [next-auth][debug][CHUNKING_SESSION_COOKIE] {
    2023-11-28T22:56:03.899861549Z   message: 'Session cookie exceeds allowed 4096 bytes.',
    2023-11-28T22:56:03.899866174Z   emptyCookieSize: 163,
    2023-11-28T22:56:03.899868091Z   valueSize: 5873,
    2023-11-28T22:56:03.899872549Z   chunks: [ 4096, 2103 ]
    2023-11-28T22:56:03.899907424Z }
    2023-11-28T22:56:03.940223716Z {"level":"info","message":"Returning current token..."}
    2023-11-28T22:56:03.946529008Z [next-auth][debug][CHUNKING_SESSION_COOKIE] {
    2023-11-28T22:56:03.946572008Z   message: 'Session cookie exceeds allowed 4096 bytes.',
    2023-11-28T22:56:03.946577716Z   emptyCookieSize: 163,
    2023-11-28T22:56:03.946579758Z   valueSize: 5873,
    2023-11-28T22:56:03.946582258Z   chunks: [ 4096, 2103 ]
    2023-11-28T22:56:03.946583883Z }
    2023-11-28T22:56:04.013938716Z {"level":"info","message":"Returning current token..."}
    2023-11-28T22:56:04.019649674Z [next-auth][debug][CHUNKING_SESSION_COOKIE] {
    2023-11-28T22:56:04.019703966Z   message: 'Session cookie exceeds allowed 4096 bytes.',
    2023-11-28T22:56:04.019710924Z   emptyCookieSize: 163,
    2023-11-28T22:56:04.019713799Z   valueSize: 5873,
    2023-11-28T22:56:04.019715549Z   chunks: [ 4096, 2103 ]
    2023-11-28T22:56:04.019717424Z }