This version of the OpenSearch documentation is no longer maintained. For the latest version, see the current documentation. For information about OpenSearch version maintenance, see Release Schedule and Maintenance Policy.
The Security plugin can integrate with identify providers that use the OpenID Connect standard. This feature enables the following:
Point the Security plugin to the metadata of your identity provider (IdP), and the Security plugin uses that data for configuration.
Automatic key fetching
The Security plugin automatically retrieves the public key for validating the JSON Web Tokens (JWTs) from the JSON Web Key Set (JWKS) endpoint of your IdP. You don’t have to configure keys or shared secrets in
You can change the keys used for signing the JWTs directly in your IdP. If the Security plugin detects an unknown key, it tries to retrieve it from the IdP. This rollover is transparent to the user.
OpenSearch Dashboards as single sign-on or as one option among multiple authentication types in the Dashboards sign-in window.
Configure OpenID Connect integration
To integrate with an OpenID IdP, set up an authentication domain and choose
openid as the HTTP authentication type. JWTs already contain all of the information required to verify the request, so set
This is the minimal configuration:
The following table shows the configuration parameters.
|The URL of your IdP where the Security plugin can find the OpenID Connect metadata/configuration settings. This URL differs between IdPs. Required.
|The HTTP header that stores the token. Typically the
Authorization header with the
Authorization: Bearer <token>. Optional. Default is
|If the token is not transmitted in the HTTP header, but as an URL parameter, define the name of the parameter here. Optional.
|The key in the JSON payload that stores the user’s name. If not defined, the subject registered claim is used. Most IdP providers use the
preferred_username claim. Optional.
|The key in the JSON payload that stores the user’s roles. The value of this key must be a comma-separated list of roles. Required only if you want to use roles in the JWT.
OpenID Connect URL
OpenID Connect specifies various endpoints for integration purposes. The most important endpoint is
well-known, which lists endpoints and other configuration options for the Security plugin.
The URL differs between IdPs, but usually ends in
The main information that the Security plugin needs is
jwks_uri. This URI specifies where the IdP’s public keys in JWKS format can be found. For example:
For more information about IdP endpoints, see the following:
Time disparity compensation for JWT validation
Occasionally you may find that the clock times between the authentication server and the OpenSearch node are not perfectly synchronized. When this is the case, even by a few seconds, the system that either issues or receives a JWT may try to validate
nbf (not before) and
exp (expiration) claims and fail to authenticate the user due to the time disparity.
By default, Security allows for a window of 30 seconds to compensate for possible misalignment between server clock times. To set a custom value for this feature and override the default, you can add the
jwt_clock_skew_tolerance_seconds setting to the
Fetching public keys
When an IdP generates and signs a JWT, it must add the ID of the key to the JWT header. For example:
As per the OpenID Connect specification, the
kid (key ID) is mandatory. Token verification does not work if an IdP fails to add the
kid field to the JWT.
If the Security plugin receives a JWT with an unknown
kid, it visits the IdP’s
jwks_uri and retrieves all available, valid keys. These keys are used and cached until a refresh is triggered by retrieving another unknown key ID.
Key rollover and multiple public keys
The Security plugin can maintain multiple valid public keys at once. The OpenID specification does not allow for a validity period of public keys, so a key is valid until it has been removed from the list of valid keys in your IdP and the list of valid keys has been refreshed.
If you want to roll over a key in your IdP, follow these best practices:
Create a new key pair in your IdP, and give the new key a higher priority than the currently used key.
Your IdP uses this new key over the old key.
Upon first appearance of the new
kidin a JWT, the Security plugin refreshes the key list.
At this point, both the old key and the new key are valid. Tokens signed with the old key are also still valid.
The old key can be removed from your IdP when the last JWT signed with this key has timed out.
If you have to immediately change your public key, you can also delete the old key first and then create a new one. In this case, all JWTs signed with the old key become invalid immediately.
To prevent man-in-the-middle attacks, you should secure the connection between the Security plugin and your IdP with TLS.
Use the following parameters to enable TLS for connecting to your IdP:
|Whether to use TLS. Default is false.
|Whether to verify the hostnames of the IdP’s TLS certificate. Default is true.
To validate the TLS certificate of your IdP, configure either the path to the IdP’s root CA or the root certificate’s content:
|Absolute path to the PEM file containing the root CAs of your IdP.
|The root CA content of your IdP. Cannot be used if
pemtrustedcas_filepath is set.
TLS client authentication
To use TLS client authentication, configure the PEM certificate and private key the Security plugin should send for TLS client authentication (or its content):
|Whether to send the client certificate to the IdP server. Default is false.
|Absolute path to the client certificate.
|The content of the client certificate. Cannot be used when
pemcert_filepath is set.
|Absolute path to the file containing the private key of the client certificate.
|The content of the private key of your client certificate. Cannot be used when
pemkey_filepath is set.
|The password of your private key, if any.
Enabled ciphers and protocols
You can limit the allowed ciphers and TLS protocols by using the following keys.
|Array. Enabled TLS cipher suites. Only Java format is supported.
|Array. Enabled TLS protocols. Only Java format is supported.
(Advanced) DoS protection
To help protect against denial-of-service (DoS) attacks, the Security plugin only allows a maximum number of new key IDs in a certain span of time. If the number of new key IDs exceeds this threshold, the Security plugin returns HTTP status code 503 (Service Unavailable) and refuses to query the IdP. By default, the Security plugin does not allow for more than 10 unknown key IDs within 10 seconds. The following table shows how to modify these settings.
|The maximum number of unknown key IDs in the time frame. Default is 10.
|The time frame to use when checking the maximum number of unknown key IDs, in milliseconds. Default is 10000 (10 seconds).
OpenSearch Dashboards single sign-on
Activate OpenID Connect by adding the following to
OpenID Connect providers usually publish their configuration in JSON format under the metadata url. Therefore, most settings can be pulled in automatically, so the OpenSearch Dashboards configuration becomes minimal. The most important settings are the following:
- Connect URL
Every IdP can host multiple clients (sometimes called applications) with different settings and authentication protocols. When enabling OpenID Connect, you should create a new client for OpenSearch Dashboards in your IdP. The client ID uniquely identifies OpenSearch Dashboards.
Beyond the ID, each client also has a client secret assigned. The client secret is usually generated when the client is created. Applications can obtain an identity token only when they provide a client secret. You can find this secret in the settings of the client on your IdP.
|The URL where the IdP publishes the OpenID metadata. Required.
|The ID of the OpenID Connect client configured in your IdP. Required.
|The client secret of the OpenID Connect client configured in your IdP. Required.
|The scope of the identity token issued by the IdP. Optional. Default is
openid profile email address phone.
|HTTP header name of the JWT token. Optional. Default is
|The logout URL of your IdP. Optional. Only necessary if your IdP does not publish the logout URL in its metadata.
|The base of the redirect URL that will be sent to your IdP. Optional. Only necessary when OpenSearch Dashboards is behind a reverse proxy, in which case it should be different than
base_redirect_url from the reverse proxy HTTP headers (
X-Forwarded-Proto). Optional. Default is
# Enable OpenID authentication
# The IdP metadata endpoint
# The ID of the OpenID Connect client in your IdP
# The client secret of the OpenID Connect client
# Use HTTPS instead of HTTP
opensearch.url: "https://<hostname>.com:<http port>"
# Configure the OpenSearch Dashboards internal server user
# Disable SSL verification when using self-signed demo certificates
# allowlist basic headers and multi-tenancy header
opensearch.requestHeadersAllowlist: ["Authorization", "security_tenant"]
To include OpenID Connect with other authentication types in the Dashboards sign-in window, see Configuring sign-in options.
Session management with additional cookies
To improve session management—especially for users who have multiple roles assigned to them—Dashboards provides an option to split cookie payloads into multiple cookies and then recombine the payloads when receiving them. This can help prevent larger OpenID Connect assertions from exceeding size limits for each cookie. The two settings in the following example allow you to set a prefix name for additional cookies and specify the number of them. They are added to the
opensearch_dashboards.yml file. The default number of additional cookies is three:
Note that reducing the number of additional cookies can cause some of the cookies that were in use before the change to stop working. We recommend establishing a fixed number of additional cookies and not changing the configuration after that.
If the ID token from the IdP is especially large, OpenSearch may throw a server log authentication error indicating that the HTTP header is too large. In this case, you can increase the value for the
http.max_header_size setting in the
OpenSearch security configuration
Because OpenSearch Dashboards requires that the internal OpenSearch Dashboards server user can authenticate through HTTP basic authentication, you must configure two authentication domains. For OpenID Connect, the HTTP basic domain has to be placed first in the chain. Make sure you set the challenge flag to
Modify and apply the following example settings in