node.js - Implementera keycloak connect i en express-applikation


Jag använder Keycloak-servern för auktorisering (mikrotjänst).

Jag klonade detta projekt https://github.com/w3tecch/express-typescript-boilerplate/tree/master

I mitt express-projekt använder jag keycloak-connect (Keycloak-adapter) biblioteket

Jag vill implementera koden nedan i mitt nya express-nodejs-projekt.

referens: https://github.com/keycloak/keycloak-quickstarts/blob/latest/service-nodejs/app.js

  app.get('/service/secured', keycloak.protect(), function (req, res) {
      res.json({message: 'secured'});
    });

Jag använder routing-controllers-biblioteket för Express. Jag vet inte hur man använder keycloak.protect() i det här projektet. Några förslag?

Hittills vad jag har lyckats göra (jag är inte säker på om detta är rätt sätt):

authorizationChecker.ts

export function authorizationChecker(connection: Connection): (action: Action, roles: any[]) => Promise<boolean> | boolean {
    return async function innerAuthorizationChecker(action: Action, roles: string[]): Promise<any> {
        try {
            const grant = await KeycloakService.keycloak.getGrant(action.request, action.response);
            action.request.auth =  await KeycloakService.keycloak.grantManager.userInfo(grant.access_token);
            return true;
        } catch (e) {
            console.log(e)
            return false;
        }
    };
}

och sedan använder jag annotation @Authorized() i controllern:

@Authorized()
@JsonController('/users')
export class UserController {
}

Jag använder Postman för att testa API. Jag kan få token och jag kan göra några förfrågningar på mitt API innan jag får autentiseringsfel. Utgångstid för token är inte inställd.