passport-keycloak-jwt-introspect
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

passport-keycloak-jwt-introspect

By using Keycloak, you can validate access tokens in different ways: online or offline.

This Passport strategy allows you to perform an online validation of an access token by doing instrospect.

Installation

npm install passport-keycloak-jwt-introspect

Usage

Configuration

import keycloak from "passport-keycloak-jwt-introspect";
const KeycloakJwtIntrospectStrategy = keycloak.Strategy;

passport.use(
    new KeycloakJwtIntrospectStrategy(
      {
        clientId: KEYCLOAK_CLIENT_ID,
        clientSecret: KEYCLOAK_CLIENT_SECRET,
        introspectUrl: KEYCLOAK_INTROSPECT_URL,
        passReqToCallback: true,
      },
      function (req, keycloakData, done) {
        // You should always check that the token is active!
        if (!keycloakData.active) return done(null, false);

        // You can use all info. in jwtPayload to make your validations and create your user
        return done(null, jwtPayload);
      },
    ),
);

KEYCLOAK_INTROSPECT_URL_EXAMPLE: http://localhost:8080/realms/YOUR_REALM/protocol/openid-connect/token/introspect

Check out Keycloak Data Example JSON file to learn about all available attributes in the object.

Request authentication

Since this is a Bearer-like strategy, you don't have to use sessions. The token will be validated on every request.

We could create a function to use as middleware and validate every request:

export const checkAuth = (req: Request, res: Response, next: NextFunction) => {
  passport.authenticate("keycloak-jwt-introspect", { session: false })(
    req,
    res,
    next,
  );
};

Then, we can use it wherever we need to. For example, as a global middleware for our app:

app.use(checkAuth);

Examples

Example usage cases and configuration are coming soon. Any help is appreciated, so feel free to contribute!

TODO

  • [ ] Improve documentation
  • [ ] Add more unit tests, specially to check different responses from keycloak
  • [ ] Create usage examples
  • [ ] Add repository badges

Issues and contributing

As I said, any help is appreciated. You can report any issue on the Issues page as well as making a pull request to improve any aspect of the project.

License

The MIT License

Package Sidebar

Install

npm i passport-keycloak-jwt-introspect

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

20 kB

Total Files

16

Last publish

Collaborators

  • m4rc0sx