Skip to main content


Support level: Community

What is Node-RED



Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.


This requires modification of the Node-RED settings.js and installing additional Passport-js packages, see Securing Node-RED documentation for further details.


The following placeholders will be used:

  • is the FQDN of authentik.
  • is the FQDN of Node-RED.

Step 1

In authentik, create an OAuth2/OpenID Provider (under Resources/Providers) with these settings:


Only settings that have been modified from default have been listed.

  • Name: Node-RED

Protocol Settings


Take note of the Client ID and Client Secret, you'll need to give them to Node-RED in Step 3.

Step 2

In authentik, create an application (under Resources/Applications) which uses this provider. Optionally apply access restrictions to the application using policy bindings.


Only settings that have been modified from default have been listed.

  • Name: Node-RED
  • Slug: nodered-slug
  • Provider: Node-RED

Optionally you can link directly to the authentication strategy

Step 3


Group based permissions are not implemented in the below example

Use npm to install passport-openidconnect

Navigate to the node-red node_modules directory, this is dependant on your chosen install method. In the official Node-RED docker container the node_modules directory is located in the data volume data/node_modules/. Alternatively enter the docker container docker exec -it nodered bash and cd /data/node_modules to utilise npm within the docker container.

Run the command npm install passport-openidconnect

Step 4

Edit the node-red settings.js file /data/settings.js to use the external authentication source via passport-openidconnect.

adminAuth: {
strategy: {
name: "openidconnect",
label: 'Sign in with authentik',
strategy: require("passport-openidconnect").Strategy,
options: {
issuer: '<application-slug>/',
authorizationURL: '',
tokenURL: '',
userInfoURL: '',
clientID: '<Client ID (Key): Step 2>',
clientSecret: '<Client Secret: Step 2>',
callbackURL: '',
scope: ['email', 'profile', 'openid'],
proxy: true,
verify: function(issuer, profile, done) {
done(null, profile)
users: function(user) {
return Promise.resolve({ username: user, permissions: "*" });