Register EAS to Enable SSO for Embedded Content

As a Tableau Server admin, you can register an external authorisation server (EAS) to establish a trust relationship between your Tableau Server and the EAS using the OAuth 2.0 standard protocol. By establishing a trust relationship, you’re able to:

  • Provide your users with a single sign-on (SSO) experience to Tableau content embedded in your external applications through the identity provider (IdP) you’ve already configured for Tableau Server
  • Programmatically authorise access to the Tableau REST API (and the Metadata API starting in Tableau Server October 2023) on users' behalf using a JSON Web Token (JWT)

When embedded Tableau content is loaded in your external application, a standard OAuth flow is used. After users successfully sign in to the IdP, they are then automatically signed in to Tableau Server. Follow the steps described below to register your EAS with Tableau Server.

Important:

  • Some of the procedures in this topic require configuration with third-party software and services. We’ve made a best effort to verify the procedures to enable the EAS feature on Tableau Server. However, third-party software and services might change or your organisation might differ. If you encounter issues, refer to your third-party documentation for authoritative configuration details and support.
  • To enable embedding through EAS, Tableau Server must be configured to use SSL for HTTP traffic.
  • In order for the session token to be valid, the clocks of the external application and the server that hosts the external application must be set to Coordinated Universal Time (UTC). If either clock uses a different standard, the connected app will not be trusted.

Step 1: Before you begin

To register an EAS with Tableau Server , you must have an EAS already configured. In addition, the EAS must send a valid JSON Web Token (JWT) that contains the registered claims and header listed in the table below.

ClaimNameDescription or required value
"kid"Key IDRequired (in header). A unique key identifier from the identity provider.
"iss"IssuerRequired (in header or as a claim). Unique issuer URIthat identifies the trusted connect app and its signing key.
"alg"AlgorithmRequired (in header). JWT signing algorithm. Supported algorithm names are listed in the Class JWSAlgorithm(Link opens in a new window) page in the javadoc.io documentation. The signing algorithm can be configured using the vizportal.oauth.external_authorization_server.blocklisted_jws_algorithms command.
"sub"SubjectUsername of the authenticated Tableau Server user.
"aud"Audience

Value must be: "tableau"

"exp"Expiry TimeA valid JWT must not have expired. The expiry time (in UTC) of the JWT must be within the configured maximum validity period. Maximum validity period can be configured using vizportal.oauth.external_authorization_server.max_expiration_period_in_minutes command.
"jti"JWT IDThe JWT ID claim provides a unique identifier for the JWT and is case sensitive.
"scp"Scope

For embedding workflows, supported values include:

"tableau:views:embed"
"tableau:views:embed_authoring" (Added in Tableau Server 2022.3)
"tableau:metrics:embed" (Retired in Tableau Server 2023.3)
"tableau:ask_data:embed"(Added in Tableau Server 2023.1. Will be retired in Tableau Server 2024.2)

Notes:

  • Values must be passed as a list type.
  • For tableau:views:embed, the scope respects users’ permissions already configured in Tableau Server and allows users to interact with the tools in the embedded view if available in the original view.
  • We recommend that the embed code excludes the toolbar parameter. For more information see Known issues (embedding workflows only) below.

For REST API authorisation workflows, see REST API methods that support JWT authorisation.

For Metadata API workflows that use the REST API for authentication, the only supported scope is tableau:content:read.

Note: The JWT claims above are documented in the Registered Claim Names(Link opens in a new window) section in the documentation distributed by the Internet Engineering Task Force (IETF) organisation.

Step 2: Register your EAS with Tableau Server

By registering your EAS with Tableau Server, you establish a trust relationship between the EAS and Tableau Server . This means when users access Tableau content embedded in your external application, they are redirected to authenticate with the IdP. The EAS generates the authentication token, which is passed to Tableau Server for verification. After the trust relationship is verified, access to the embedded content is granted to users.

After registering the EAS, the established trust relationship applies to all sites on Tableau Server.

Note: Some EASs support the option to display a consent dialog that asks for users’ approval for the application to access Tableau content. To ensure the best experience for your users, we recommend you configure your EAS to automatically consent to the external application’s request on users’ behalf.

  1. As a Tableau Server admin, sign in to the Tableau Services Manager (TSM) web UI. For more information, see Sign in to Tableau Services Manager Web UI.

  2. Navigate to User Identity & Access > Authorisation Server, and do the following:
    1. Select the Enable OAuth access for embedded content tick box.

    2. In the Issuer URL text box, paste the issuer URL of the EAS.

    3. Click the Save Pending Changes button.

  3. When finished, do the following:
    1. In the upper-right corner of the page, click the Pending Changes button.

    2. In the bottom-right corner of the page, click the Apply Changes and Restart button to stop and restart Tableau Server.

  1. Open a command prompt as an admin on the initial node (where TSM is installed) in the cluster.
  2. Run the following commands:

    tsm configuration set -k vizportal.oauth.external_authorization.enabled -v true
    tsm configuration set -k vizportal.oauth.external_authorization_server.issuer -v "<issuer_url_of_EAS>"
    tsm restart

Step 3: Next steps

For embedding workflows

After configuring Tableau Server to use your EAS, you must add embed code to your external application. Ensure that you include the valid JWT generated by your EAS, as described in Step 1, in the web component that your external application calls.

For more information about embedding Tableau content, see one or both of the following:

Note: For users to successfully authenticate when they access embedded content, browsers must be configured to allow third-party cookies.

Control where content can be embedded using domain allowlist for embedding

Starting in Tableau Server 2023.3, you and your users can control whether Tableau content can be embedded without restriction or restricted to certain domains using the Update Embedding Settings for Site method in Tableau REST API.

By default, the unrestrictedEmbedding site setting for embedding is set to true to allow unrestricted embedding. Alternatively, you and your users can set the setting to false and specify the domains where Tableau content in external applications can be embedded using the allowList parameter.

For more information, see one or both of the following:

For REST API authorisation workflows

After the JWT has been configured, you must add the valid JWT to the REST API Sign In request for authorised access. For more information, see Access Scopes for Connected Apps.

For Metadata API workflows

After the JWT has been configured, you must add the valid JWT to the REST API Sign In request. For more information, see Access Scopes for Connected Apps.

Known issues (embedding workflows only)

There are a couple of known issues when using connected apps that will be addressed in a future release.

  • Toolbar features: When embedded content has the toolbar parameter defined, not all toolbar features will work. To work around this issue, we recommend you hide the toolbar parameter like in the example below.

    <tableau-viz id='tab-viz' src='https://<your_server>/t/<your_site>/...'
    	toolbar='hidden'>
    </tableau-viz>

  • Published data sources: Published data sources set to Prompt User for database credentials will not display. To work around this issue, if possible, we recommend data source owners embed their database credentials instead.

Troubleshoot

When embedded content fails to be displayed in your external application or Tableau REST API authorisation fails, you can use a browser’s developer tools to inspect and identify error codes that might be associated with the EAS feature enabled on Tableau Server .

Refer to the table below to review the description of the error code and potential resolution.

Error codeSummaryDescriptionPotential resolution or explanation
5SYSTEM_USER_NOT_FOUNDTableau user could not be found
To resolve this issue, verify the 'sub' (Subject) claim value in the JWT is the ‘username’ for the authenticated Tableau Server. This value is case sensitive.
16LOGIN_FAILEDLogin failedThis error is typically caused by one of the following claim issues in the JWT:
67FEATURE_NOT_ENABLEDOn-demand access is not supportedOn-demand access is available through licensed Tableau Cloud sites only.
10081COULD_NOT_RETRIEVE_IDP_METADATAMissing EAS metadata endpointTo resolve this issue, verify the EAS is configured correctly and the correct issuer is being called.
10082AUTHORISATION_SERVER_ISSUER_NOT_SPECIFIEDMissing issuerTo resolve this issue, verify that the correct issuer is being called. To change the issuer URL, you can use the vizportal.oauth.external_authorization_server.issuer command.
10083BAD_JWTJWT header contains issuesThe 'kid' (Secret ID) or 'clientId' (Issuer) claims are missing from the JWT header. To resolve this issue, ensure this information is included.
10084JWT_PARSE_ERRORJWT contains issuesTo resolve this issue, verify the following:
  • The 'aud' (Audience) value referenced in the JWT uses the ‘tableau’ value. This value is case sensitive.
  • The 'aud' (Audience) and 'sub' (Subject) are included in the JWT.
10085COULD_NOT_FETCH_JWT_KEYSJWT could not find keysCould not find the secret.

To resolve this issue, verify that the correct issuer is being called. To change the issuer URL, you can use the vizportal.oauth.external_authorization_server.issuer command.

10087BLOCKLISTED_JWS_ALGORITHM_USED_TO_SIGNIssue with the JWT signing algorithmTo resolve the issue, you can remove the signing algorithm. For more information, see vizportal.oauth.external_authorization_server.blocklisted_jws_algorithms.
10088RSA_KEY_SIZE_INVALIDIssue with JWT signing requirementsTo resolve this issue, verify with the EAS or IdP that the JWT is being signed with an RSA key size of 2048.
10091JTI_ALREADY_USEDUnique JWT requiredThe JWT has already been used in the authentication process. To resolve this issue, the EAS or IdP must generate a new JWT.
10092NOT_IN_DOMAIN_ALLOW_LISTDomain of the embedded content is not specifiedTo resolve this issue, ensure the unrestrictedEmbedding setting is set to true or domainAllowlist parameter includes the domains where Tableau content is embedded using the Update Embedding Settings for Site(Link opens in a new window) method in the Tableau REST API.
10094MISSING_REQUIRED_JTIMissing JWT IDTo resolve this issue, verify the 'jti' (JWT ID) is included in the JWT.
10096JWT_EXPIRATION_EXCEEDS_CONFIGURED_EXPIRATION_PERIOD The 'exp' (Expiry Time) exceeds the default maximum validity period. To resolve this issue, review registered claims(Link opens in a new window) required for a valid JWT and ensure the correct value is used. To change the maximum validity period, you can use the vizportal.oauth.external_authorization_server.max_expiration_period_in_minutes command.
10097SCOPES_MALFORMEDIssues with scopes claimThis error can occur when the 'scp' (Scope) claim is either missing from the JWT or not passed as a list type. To resolve this issue, verify 'scp' is included in the JWT and passed as a list type. For troubleshooting help with a JWT, see Debugger(Link opens in a new window) on the auth0 site.
10098JWT_UNSIGNED_OR_ENCRYPTEDJWT is unsigned or encryptedTableau does not support an unsigned or encrypted JWT.
10099SCOPES_MISSING_IN_JWTMissing scopes claimThe JWT is missing the required 'scp' (Scope) claim. To resolve this issue, verify 'scp' is included in the JWT. For troubleshooting help with a JWT, see Debugger(Link opens in a new window) on the auth0 site.
10100JTI_PERSISTENCE_FAILEDUnexpected JWT ID errorThere was an unexpected error with the 'jti' (JWT ID). To resolve this issue, a new JWT with a new 'jti' must be generated.
10103JWT_MAX_SIZE_EXCEEDEDJWT exceeds maximum sizeThis error can occur when JWT size exceeds 8000 bytes. To resolve this issue, make sure that only the necessary claims are being passed to Tableau Server.
Thanks for your feedback!Your feedback has been successfully submitted. Thank you!