Depuis Tableau Server version 2022.1,, les applications connectées à Tableau permettent une expérience d'authentification transparente et sécurisée en facilitant une relation de confiance explicite entre votre site Tableau Server et les applications personnalisées dans lesquelles le contenu Tableau est intégré.

Les applications connectées offrent les avantages suivants :

  • Restreindre l'accès aux emplacements où un contenu peut être intégré et là où ce contenu peut être intégré
  • Offrir aux utilisateurs la possibilité d'accéder au contenu intégré à l'aide de l'authentification unique (SSO) sans avoir à effectuer une intégration avec un fournisseur d'identité (IdP)
  • Offrir aux utilisateurs la possibilité de s'authentifier directement depuis votre application personnalisée

Remarques :

  • La fonctionnalité d’applications connectées, sans interface utilisateur, pour Tableau Server est devenue disponible dans Tableau Server version 2021.4 via les méthodes d'application connectée(Le lien s’ouvre dans une nouvelle fenêtre) dans l'API Tableau REST.
  • Pour activer l'intégration via des applications connectées, Tableau Server doit être configuré de manière à utiliser SSL pour le trafic HTTP.
  • Les applications connectées à Tableau et les applications connectées à Salesforce sont différentes et offrent des fonctionnalités différentes. Aujourd'hui, les applications connectées à Tableau sont optimisées pour intégrer des vues et des métriques Tableau dans des applications personnalisées.

Remarque : si votre application connectée s'exécute dans un conteneur, tel qu'une instance EC2, les horloges du conteneur et de l'hôte doivent être définies sur UTC pour que le jeton de session soit valide. Si l'une ou l'autre des horloges utilise une norme différente, l'application connectée ne sera pas approuvée.

Comment fonctionnent les applications connectées

La relation de confiance entre votre site Tableau Server et l'application personnalisée est établie et vérifiée via un jeton d'authentification dans la norme JSON Web Token (JWT). Elle utilise un secret partagé fourni par l'application connectée à Tableau et signé par votre application personnalisée.

Composants clés d'une application connectée

Les composants suivants de l’application connectée fonctionnent avec le jeton JWT dans votre application personnalisée pour authentifier les utilisateurs et afficher le contenu intégré.

  • Secrets : les secrets sont des clés partagées par Tableau et votre application personnalisée. Ils sont utilisés dans les signatures qui constituent le jeton JWT. Un secret est requis en cas d'utilisation d'applications connectées pour intégrer l'authentification. Les secrets peuvent être créés dans une application connectée, n'expirent pas et restent valides jusqu'à leur suppression.
  • Liste d'autorisations de domaines : vous pouvez spécifier une liste de domaines autorisés dans chaque application connectée. Le contenu Tableau intégré via une application connectée n'est autorisé que dans les domaines spécifiés. Cela permet de garantir que le contenu est exposé sous des domaines sécurisés et approuvés par votre entreprise.
  • Niveau d'accès : vous pouvez spécifier quel contenu peut être intégré via une application connectée en associant une application connectée à un projet ou à tous les projets. Si vous spécifiez un projet, seul le contenu du projet sélectionné peut être intégré via l'application connectée.

Workflow de l'application connectée

Le schéma ci-dessous illustre le fonctionnement de l'authentification entre votre application personnalisée (serveur Web et page Web) et l'application connectée.

  1. L'utilisateur visite la page Web : lorsqu'un utilisateur visite le contenu intégré sur une page Web, la page Web envoie une demande GET à votre application personnalisée pour récupérer le code HTML sur cette page Web.
  2. L'application personnalisée construit un jeton d'authentification : l’application personnalisée construit un jeton JWT, qui contient un secret de l'application connectée (voir l'étape 3 ci-dessous pour les exigences JWT supplémentaires) et la portée de l'accès utilisateur pour le contenu intégré. Le secret est signé par l'application personnalisée et est utilisé pour la vérification de la relation de confiance dans une étape ultérieure.
  3. L'application personnalisée répond avec un jeton d'authentification : l’application personnalisée répond à la page avec le JWT dans l'URL du contenu intégré appelée par la page Web.
  4. La page Web demande du contenu à Tableau : lors de la tentative de chargement du contenu intégré, la page Web appelle l'URL du contenu intégré, qui envoie une requête GET à Tableau.
  5. Tableau valide le jeton : Tableau reçoit le JWT et vérifie la relation de confiance avec l'application personnalisée en identifiant l'application connectée et le secret partagé utilisé dans le JWT. Tableau crée ensuite une session pour l'utilisateur. La session respecte non seulement les étendues d'intégration définies dans le JWT, mais également les restrictions spécifiées dans l'application connectée, y compris les domaines autorisés et les projets autorisés.
  6. Tableau renvoie le contenu en fonction du contexte d'intégration restreint : le contenu intégré se charge uniquement lorsque la page se trouve sous un domaine autorisé et que le contenu est publié dans un projet autorisé (le cas échéant). L'utilisateur authentifié ne peut interagir avec le contenu intégré que par la portée définie dans le jeton JWT.

Créer une application connectée

Étape 1 : Créer une application connectée

Créez une application connectée à partir de la page Paramètres de Tableau Server.

  1. En tant qu'administrateur de serveur ou de site, connectez-vous à Tableau Server.

  2. Dans le volet de gauche, sélectionnez Paramètres > Applications connectées, puis cliquez sur le bouton Nouvelle application connectée.

  3. Dans la boîte de dialogue Créer une application connectée, suivez la procédure ci-dessous :
    1. Dans la zone de texte Nom de l'application connectée, saisissez un nom pour l'application connectée.

    2. Dans le menu déroulant S'applique à, sélectionnez Tous les projets ou Un seul projet pour contrôler les vues ou les métriques pouvant être intégrées. Si vous sélectionnez l'option "Un seul projet", sélectionnez le projet spécifique à cibler.

    3. Dans la liste d'autorisations de domaines, spécifiez les domaines à l'aide des règles décrites dans Formatage de domaine ci-dessous pour contrôler où les vues ou les métriques peuvent être intégrées.

    4. Une fois terminé, cliquez sur le bouton Créer.

  4. À côté du nom de l’application connectée, cliquez sur le menu Actions et sélectionnez Activer. Pour des raisons de sécurité, une application connectée est désactivée par défaut lors de sa création.

  5. Notez l'ID de l'application connectée, également appelé ID client, à utiliser à l'étape 3 ci-dessous.

Étape 2 : Générer un secret

Vous pouvez générer un total de deux secrets pour chaque application connectée. Le deuxième secret peut être utilisé à des fins de rotation des secrets pour renforcer la protection contre les problèmes si un secret est compromis.

  1. Dans la page de détails de l'application connectée que vous avez créée à l'étape 1, cliquez sur le bouton Générer un nouveau secret.

  2. Notez l'ID secret et la valeur secrète à utiliser à l'étape 3 ci-dessous.

Étape 3 : Configurer le JWT

Après avoir généré un secret, vous souhaitez permettre à votre application personnalisée d'envoyer un JWT valide. JWT est une norme utilisée pour transférer en toute sécurité des informations entre deux parties. Le JWT est signé par votre application personnalisée pour envoyer en toute sécurité des informations à Tableau Server. Le JWT référence l'application connectée, l'utilisateur pour lequel la session est générée et le niveau d'accès que l'utilisateur doit avoir.

Un JWT valide comprend les informations suivantes :

  • ID d'application connectée, également appelé ID client, à partir de l'étape 1
  • ID secret et valeur secrète générés à l'étape 2

  • Revendications enregistrées et en-tête :

    Revendication Description ou valeur requise
    "kid" (ID de secret) Obligatoire (dans l'en-tête). L'ID de secret de l'application connectée.
    "iss" (émetteur) Obligatoire (dans l'en-tête ou en tant que revendication). URI d'émetteur unique qui identifie l'application de connexion de confiance et sa clé de signature.
    "alg " (algorithme) Obligatoire (dans l'en-tête ou en tant que revendication). Algorithme de signature JWT. Seul HS256 est pris en charge.
    "sub" (sujet) Nom d'utilisateur de l'utilisateur Tableau Server authentifié.
    "aud" (public) La valeur doit être : "tableau"
    "exp" (date d'expiration)

    Pour être valide, un JWT ne doit pas avoir expiré. Le délai d'expiration du JWT doit être compris dans la période de validité maximale configurée. La période de validité maximale peut être configurée à l'aide de la commande tsm vizportal.oauth.connected_apps.max_expiration_period_in_minutes.

    "jti" (identifiant JWT) Obligatoire en tant que réclamation. La demande d'ID JWT fournit un identifiant unique pour le jeton JWT et est sensible à la casse.
    "scp" (portée)

    Les valeurs prises en charge incluent :

    "tableau:views:embed"
    "tableau:metrics:embed"

    Remarques :

    • Les valeurs doivent être transmises sous forme de type de liste.
    • Pour tableau:views:embed, la portée respecte les autorisations utilisateur déjà configurées dans Tableau Server et permet aux utilisateurs d'interagir avec les outils dans la vue intégrée s'ils sont disponibles dans la vue d'origine.
    • Nous recommandons que le code d'intégration exclue le paramètre de la barre d'outils. Pour plus d'informations, consultez Problèmes connus ci-dessous.

Exemples de jetons JWT

Voici des exemples de JWT dans les langages Java et Python. Les exemples Java et Python utilisent la bibliothèque nimbus-jose-jwt et la bibliothèque PyJWT respectivement.

Java

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.*;
import com.nimbusds.jwt.*;

import java.util.*;

...
				
String secret = "secretvalue";
	String kid = "connectedAppSecretId";
	String clientId = "connectedAppClientId";
	List<String> scopes = new
ArrayList<>(Arrays.asList("tableau:views:embed"));
	String username = "username";
	JWSSigner signer = new MACSigner(secret);
	JWSHeader header = new
JWSHeader.Builder(JWSAlgorithm.HS256).keyID(kid).customParam("iss", clientId).build();
	JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
		.issuer(clientId)
		.expirationTime(new Date(new Date().getTime() + 60 * 1000)) //expires in 1 minute
		.jwtID(UUID.randomUUID().toString())
		.audience("tableau")
		.subject(username)
		.claim("scp", scopes)
		.build();
	SignedJWT signedJWT = new SignedJWT(header, claimsSet);
	signedJWT.sign(signer);
	model.addAttribute("token", signedJWT.serialize());

Python

import jwt
token = jwt.encode(
	{
		"iss": connectedAppClientId,
		"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=5),
		"jti": str(uuid.uuid4()),
		"aud": "tableau",
		"sub": user,
		"scp": ["tableau:views:embed", "tableau:metrics:embed"]
	},
		connectedAppSecretKey,
		algorithm = "HS256",
		headers = {
		'kid': connectedAppSecretId,
		'iss': connectedAppClientId
        }
  )

Une fois que vous avez configuré le JWT, lorsque le code est exécuté par votre application personnalisée, il génère un jeton.

Étape 4 : Étapes suivantes d'intégration

Une fois JWT configuré, vous devez ajouter le code d'intégration à votre application personnalisée. Assurez-vous d'inclure le JWT valide que vous avez configuré à l'étape 3 ci-dessus dans le composant Web que votre application personnalisée appelle.

Pour plus d'informations sur l'intégration de contenu Tableau, consultez l'un des éléments suivants ou les deux :

Remarque : pour que les utilisateurs s'authentifient avec succès lorsqu'ils accèdent au contenu intégré, leurs navigateurs doivent être configurés de manière à autoriser les cookies tiers.

Gérer une application connectée

La page Applications connectées vous permet de gérer toutes les applications connectées pour votre site. Vous pouvez effectuer des tâches telles que créer, supprimer et désactiver des applications connectées, et également révoquer ou générer de nouveaux secrets si des secrets existants ont été compromis.

  1. En tant qu'administrateur de serveur ou de site, connectez-vous à Tableau Server.

  2. Dans le volet de gauche, sélectionnez Paramètres > Applications connectées.

  3. Cochez la case en regard de l'application connectée que vous souhaitez gérer et effectuez une ou plusieurs des opérations suivantes :

    • Générez un nouveau secret en fonction du calendrier de rotation spécifié par les politiques de sécurité de votre organisation. Pour générer un secret supplémentaire, cliquez sur le nom de l'application connectée, puis sur le bouton Générer un nouveau secret. Une application connectée peut avoir au maximum deux secrets. Les deux secrets peuvent être actifs en même temps, n'expirent pas et restent valides jusqu'à leur suppression.

    • Passez en revue les détails de l'application connectée en cliquant sur le nom de l'application connectée pour voir quand l'application connectée a été créée, son ID, la portée de projet et de domaine, ainsi que ses secrets.

    • Modifiez la portée ou le domaine du projet, dans le menu Actions, sélectionnez Modifier. Apportez les modifications souhaitées, puis cliquez sur Mettre à jour.

      Remarque : si vous modifiez la portée du projet ou du domaine et que le contenu intégré n'existe ni dans le nouveau projet ni dans le nouveau domaine, la vue ou la métrique intégrée ne peut pa s'afficher et les utilisateurs verront une erreur lors de l'accès au contenu intégré.

    • Pour supprimer un secret, cliquez sur le nom de l'application connectée. Dans la page de l'application connectée, cliquez sur Actions à côté du secret et sélectionnez Supprimer. Dans la boîte de dialogue de confirmation, sélectionnez l'onglet Supprimer.

      Remarque : si le secret de l'application connectée est utilisé par une application personnalisée, la vue ou la métrique intégrée ne peut pas s'afficher une fois le secret supprimé. Pour plus d'informations, voir Effets de la désactivation ou de la suppression d'une application connectée, ou de la suppression d'un secret ci-dessous.

    • Pour désactiver une application connectée, dans le menu Actions, sélectionnez Désactiver. Si l'application connectée est utilisée par une application personnalisée, la vue ou la métrique intégrée ne peut pas s'afficher une fois l'application connectée désactivée. Pour plus d'informations, voir Effets de la désactivation ou de la suppression d'une application connectée, ou de la suppression d'un secret ci-dessous.

Effets de la désactivation ou de la suppression d'une application connectée, ou de la suppression d'un secret

Pour afficher une vue ou une métrique intégrée à l’intention de votre utilisateur via une application connectée, l'application connectée doit être activée et un secret généré. Si l'application de connexion est utilisée dans votre application personnalisée et est désactivée ou supprimée, ou si son secret est supprimé ou remplacé, les utilisateurs recevront une erreur lors de l'accès au contenu intégré.

Pour éviter ce problème, assurez-vous que l'application de connexion est activée et que le JWT utilise l'ID et la valeur de secret corrects.

Règles de la liste d’autorisations de domaines

La liste d'autorisations de domaines de l'application connectée vous permet de restreindre l'accès au contenu Tableau intégré à tous les domaines ou à certains domaines, d’exclure certains domaines ou encore de bloquer tous les domaines.

Options de domaine

Vous pouvez sélectionner l'une des deux options lors de la configuration de la liste d'autorisations de domaines d'une application connectée :

  • Tous les domaines : par défaut, cette option permet un accès illimité au contenu intégré.
  • Domaines spécifiques uniquement : cette option vous permet de limiter l'accès au contenu intégré. Si vous utilisez cette option, suivez les règles de formatage spécifiées dans la section suivante, Formatage de domaine.

Formatage de domaine

Dans la zone de texte de la liste d'autorisations de domaines, vous pouvez saisir un domaine, plusieurs domaines ou aucun domaine du tout. La liste d'autorisations de domaines respecte tout formatage autorisé par l'en-tête frame-ancestors(Le lien s’ouvre dans une nouvelle fenêtre) du framework CSP (Content Security Policy).

Remarque : les règles de formatage de domaine s'appliquent également lors de l'utilisation des méthodes Connect App(Le lien s’ouvre dans une nouvelle fenêtre) dans l'API REST de Tableau.

Voici quelques exemples de formatage basés sur des scénarios courants :

Pour spécifier... Exemple Intégration de l'accès
Plage de domaines *.myco.com Le contenu intégré est accessible à partir de tous les sous-domaines sous myco.com.
Plusieurs domaines discrets myco.com
events.myco.com
ops.myco.com
Le contenu intégré est accessible à partir des trois domaines.
Aucun domaine [no domains] L'accès au contenu intégré est bloqué.

Problèmes connus

Il existe quelques problèmes connus liés à l'utilisation d'applications connectées. Ils seront corrigés dans une future version.

  • Fonctionnalités de la barre d'outils : lorsque le paramètre de barre d'outils est défini pour le contenu intégré, les fonctionnalités de la barre d'outils ne fonctionneront pas toutes. Pour contourner ce problème, nous vous recommandons de masquer le paramètre de la barre d'outils comme dans l'exemple ci-dessous.

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

  • Sources de données publiées : les sources de données publiées définies sur Inviter l'utilisateur pour les informations d'identification de la base de données ne s'afficheront pas. Pour contourner ce problème, si possible, nous recommandons aux propriétaires de sources de données d'intégrer à la place leurs informations d'identification pour la base de données.
Merci de vos commentaires !