Get started with OIDC
Overview
We recommend using OpenID Connect (OIDC) as the preferred authentication method for NGINX Instance Manager. OIDC offers several advantages, including Single Sign-On (SSO) for users and simplified user management for administrators through user groups. OIDC also enables easy scalability and streamlined user access management.
NGINX Instance Manager’s implementation of OIDC is designed to work with any Identity Provider (IdP) that supports the OIDC protocol. The instructions below are general and can be applied to any IdP.
Do you need to configure a specific IdP?
To learn how to configure OIDC with a specific identity provider, refer to the linked topics in the Set up specific IdPs for OIDC section at the bottom of this page.
Create roles and user groups in NGINX Instance Manager
When using OIDC for authentication, administrators don’t need to create and manage users in NGINX Instance Manager. Instead, they create user groups in NGINX Instance Manager that match groups in their IdP. The roles assigned to the user group set the access level and permissions for users based on their group membership. Users who aren’t in a group with an assigned role won’t have access to NGINX Instance Manager.
To grant users access using OIDC, follow these steps:
- Create a role in NGINX Instance Manager.
- Create a user group and assign a role to it. Important: The group name must exactly match a group name in your IdP.
- Set up OIDC.
Create a role
Roles in NGINX Instance Manager are a critical part of role-based access control (RBAC). By creating roles, you define the access levels and permissions for different user groups that correspond to groups in your Identity Provider (IdP).
NGINX Instance Manager comes pre-configured with an administrator role called admin
. Additional roles can be created as needed.
The admin
user or any user with CREATE
permission for the User Management feature can create a role.
Follow these steps to create a role and set its permissions:
-
In a web browser, go to the FQDN for your NGINX Instance Manager host and log in.
-
Select the Settings (gear) icon in the upper-right corner.
-
From the left navigation menu, select Roles.
-
Select Create.
-
On the Create Role form, provide the following details:
- Name: The name to use for the role.
- Display Name: An optional, user-friendly name to show for the role.
- Description: An optional, brief description of the role.
-
To add permissions:
- Select Add Permission.
- Choose the NGINX Instance Manager module you’re creating the permission for from the Module list.
- Select the feature you’re granting permission for from the Feature list. To learn more about features, refer to Get started with RBAC.
- Select Add Additional Access to choose a CRUD (Create, Read, Update, Delete) access level.
- Choose the access level(s) you want to grant from the Access list.
- Select Save.
-
Repeat step 6 if you need to add more permissions for other features.
-
When you’ve added all the necessary permissions, select Save to create the role.
Example scenario
Suppose you need to create an “app-developer” role. This role allows users to create and edit applications but not delete them or perform administrative tasks. You would name the role app-developer
, select the relevant features, and grant permissions that align with the application development process while restricting administrative functions.
Next steps
After creating a role, assign it to a user group within NGINX Instance Manager that matches a group in your IdP. Proceed to the create a user group with an assigned role section for detailed instructions.
Create a user group with an assigned role
Group names must match with your IdP
To ensure that NGINX Instance Manager and your IdP work together seamlessly, group names must exactly match between the two systems. If the group names don’t match, the OIDC integration will fail, preventing users from accessing NGINX Instance Manager. For example, if you have a group called “app-developers” in your IdP, you must create a user group called “app-developers” in NGINX Instance Manager. The group claim must also be part of the token your IdP generates. Refer to your IdP’s documentation for guidance on adding group claims.
Here’s how to create a user group and assign roles:
-
In a web browser, go to the FQDN for your NGINX Instance Manager host and log in.
-
Select the Settings (gear) icon in the upper-right corner.
-
From the left navigation menu, select User Groups.
-
Select Create.
-
On the Create Group form, provide the following information:
- Group Name (required): The group name or Object ID. This must exactly match the name used in the IdP.
- Display Name: A friendly name for the group.
- Description: A brief description of the group.
-
Select one or more roles from the Roles list to assign to the group.
Important:
At least one user group must have theadmin
role assigned. -
Select Save to create the group.
Example scenario
Imagine you’ve created a role called “app-developer” for users who develop, create, and modify applications but don’t need to perform administrative tasks. You want this role to correspond to a group in your IdP named “app-developers.”
In this case, select the “app-developer” role when creating the “app-developers” user group in NGINX Instance Manager. Users in the “app-developers” group from the IdP will inherit the “app-developer” role in NGINX Instance Manager.
Next steps
Now that you’ve created a user group and assigned a role in NGINX Instance Manager, continue to the configure OIDC section. These instructions will help you integrate with your IdP and ensure user groups and permissions work as expected.
Configure OIDC
Before you begin
Warning:
Before switching from basic authentication to OIDC, make sure to add at least one admin user to your IdP. Failure to do so can result in admin users being locked out of NGINX Instance Manager. If this occurs, you can restore access by reverting back to basic authentication.
When you configure OIDC for NGINX Instance Manager, basic authentication will be disabled for all users, including the default admin
user. To ensure uninterrupted access, create a user group in NGINX Instance Manager that corresponds to a group in your IdP and assign the appropriate roles.
- Follow the instructions above to grant users access before proceeding.
Requirements
The following requirements must be met before you can use OIDC with NGINX Instance Manager:
-
Install Instance Manager on a server that also has NGINX Plus R21 or newer installed. Ensure the server hosting NGINX Plus has a fully qualified domain name (FQDN).
-
Install the NGINX JavaScript module (njs) on the same server as Instance Manager. This module is required for managing communications between NGINX Plus and the identity provider.
-
Configure an IdP to provide authentication services. This includes setting up authentication policies, scopes, and client credentials within your IdP.
Enable OIDC
To enable OIDC, follow these steps to update the OIDC configuration file:
-
Open
/etc/nms/nginx/oidc/openid_configuration.conf
in a text editor and replace the default placeholder values with the relevant information for your IdP. (For more information on the variables, refer to the OIDC configuration values.) Save the changes. -
Open
/etc/nginx/conf.d/nms-http.conf
in a text editor and uncomment the OIDC settings that begin with#OIDC
. Comment out the basic authentication settings. Save the changes. -
Run
sudo nginx -t
to validate the configuration and ensure there are no errors. -
Reload NGINX and apply the new configuration with
sudo nginx -s reload
.
OIDC configuration values
The sections below provide detailed descriptions of the OIDC configuration values.
Metadata from well-known endpoints
- $oidc_authz_endpoint: The URL of the IdP’s OAuth 2.0 Authorization endpoint.
- $oidc_jwt_keyfile: The URL of the IdP’s JSON Web Key Set (JWKS) document.
- $oidc_logout_endpoint: The URL of the IdP’s end_session endpoint.
- $oidc_token_endpoint: The URL of the IdP’s OAuth 2.0 Token endpoint.
- $oidc_userinfo_endpoint: The URL of the IdP’s UserInfo endpoint.
- $oidc_host: The URL of the IdP’s application (e.g.,
https://{my-app}.okta.com
). - $oidc_scopes: List of OAuth 2.0 scope values supported by the server (e.g.,
openid+profile+email+offline_access
).
Custom configuration for well-known endpoints
For custom settings, adjust parameters such as $oidc_authz_path_params_enable
, $oidc_logout_query_params
, and others to match your IdP’s needs.
Set up specific IdPs for OIDC
For specific IdP setup instructions, refer to the following: