Using Redis
RedisClusterProvider
uses ioredis under the hood. Configuration allows for existing ioredis options with a few additions.
npm i @dapperduckling/keycloak-connector-cluster-redis
Adding clustering support
import express from 'express';
import {keycloakConnectorExpress, lock} from "@dapperduckling/keycloak-connector-server";
import cookieParser from "cookie-parser";
import {clusterKeyProvider} from "@dapperduckling/keycloak-connector-server";
import {redisClusterProvider} from "@dapperduckling/keycloak-connector-cluster-redis";
// Grab express app
const app = express();
// Register the cookie parser
app.use(cookieParser());
// Prepare the redis cluster provider
const clusterProvider = await redisClusterProvider({
hostOptions: [{
host: "localhost",
port: 6379
}],
redisOptions: {
username: 'dev-only',
password: 'my-cool-dev-password',
}
});
// Initialize keycloak connector server
await keycloakConnectorExpress(app, {
clientId: 'keycloak-connector-example',
clientSecret: 'PASSWORD_ONLY_USED_IN_DEV', // A password is not allowed in non-dev environments
serverOrigin: `http://localhost:3005`,
authServerUrl: 'http://localhost:8080/', // Your keycloak server here!
realm: 'master',
clusterProvider: clusterProvider,
keyProvider: clusterKeyProvider,
});
Configuration Options
Credential Provider
Using rotating keys? Or need to use a cloud provider's temporary token based authentication service?
Provide a function to credentialProvider
that returns a Credentials
object
export const redisCredentialProvider = async () => {
try {
const credentials = await awsCredentialProvider();
return {
password: credentials.secretAccessKey,
}
} catch (e) {
console.error("Error getting AWS credentials", e);
return undefined;
}
}
const clusterProvider = await redisClusterProvider({
credentialProvider: redisCredentialProvider,
});