Aller au contenu principal

Autoriser l'accès des utilisateurs à Databricks avec OAuth

Cette page explique comment autoriser l'accès des utilisateurs aux Ressources Databricks lors de l'utilisation de la CLI Databricks ou des APIs REST Databricks.

Databricks utilise OAuth 2.0 comme protocole préféré pour l'autorisation et l'authentification des utilisateurs en dehors de l'interface utilisateur. L'authentification client unifiée automatise la génération et le refresh des jetons. Une fois qu'un utilisateur se connecte et accorde son consentement, OAuth délivre un jeton d'accès pour que la CLI, le SDK ou un autre outil puisse l'utiliser au nom de l'utilisateur. Chaque jeton d'accès est valable une heure, après quoi un nouveau jeton est automatiquement demandé.

Sur cette page, **l'autorisation** fait référence à l'utilisation d'OAuth pour accorder l'accès aux ressources Databricks, tandis que **l'authentification** fait référence à la validation des informations d'identification via des jetons d'accès.

Pour plus de détails de haut niveau, consultez Autoriser l'accès aux ressources Databricks.

Moyens d'autoriser l'accès aux ressources Databricks

Databricks prend en charge deux façons d'autoriser les comptes d'utilisateur avec OAuth :

  • **Automatique (recommandé) :** Utilisez l'authentification unifiée si vous travaillez avec des outils et des SDK pris en charge, tels que le SDK Databricks Terraform. Cette approche gère automatiquement la génération et le refresh des jetons.

  • Manuel : Générez un vérificateur de code et un défi, puis échangez-les contre un jeton OAuth. Utilisez cette méthode si votre outil ne prend pas en charge l'authentification unifiée. Pour plus de détails, consultez Générer manuellement des jetons d'accès OAuth U2M.

Autorisation automatique avec authentification unifiée

remarque

Avant de configurer l'autorisation, examinez les autorisations d'ACL pour le type d'Opérations de workspace que vous prévoyez d'effectuer et confirmez que votre compte dispose du niveau d'accès requis. Pour plus de détails, consultez les listes de contrôle d'accès.

Pour effectuer l'autorisation OAuth avec les SDK et les outils Databricks qui prennent en charge l'authentification unifiée, intégrez les éléments suivants dans votre code :

Pour utiliser des variables d'environnement pour un type d'authentification Databricks spécifique avec un outil ou un SDK, consultez Autoriser l'accès aux ressources Databricks ou la documentation de l'outil ou du SDK. Voir aussi Variables et champs d'environnement pour l'authentification unifiée et la Priorité de la méthode d'authentification.

Pour les opérations au niveau du compte, définissez les variables d'environnement suivantes :

  • DATABRICKS_HOST, défini sur la valeur de l'URL de la console de votre compte Databricks, https://accounts.cloud.databricks.com.
  • DATABRICKS_ACCOUNT_ID

Pour les opérations au niveau du workspace, définissez les variables d'environnement suivantes :

Générer manuellement des jetons d'accès OAuth U2M

Cette section est destinée aux utilisateurs qui travaillent avec des outils ou services tiers qui ne prennent pas en charge le standard d'authentification unifiée Databricks. Si vous devez générer, refresh ou utiliser manuellement les jetons OAuth Databricks pour l'authentification OAuth U2M, suivez les étapes de cette section.

Étape 1 : Générez un vérificateur de code et un défi.

Pour générer manuellement des jetons d'accès OAuth U2M, start par créer un code verifier et un code challenge correspondant. Vous utiliserez le challenge à l’étape 2 pour obtenir un code d’autorisation, et le vérificateur à l’étape 3 pour échanger ce code contre un jeton d'accès.

remarque

Suivez la norme OAuth PKCE:

  • Le vérificateur de code est une chaîne aléatoire cryptographique (de 43 à 128 caractères) utilisant les caractères A–Z, a–z, 0–9, -._~.
  • Le défi de code est un hachage SHA256 encodé en URL Base64 du vérificateur.

Pour plus d’informations, voir Authorization Request.

Le script Python suivant génère un vérificateur et un défi. Bien que vous puissiez les utiliser plusieurs fois, Databricks recommande de générer une nouvelle paire chaque fois que vous générez manuellement des jetons d'accès.

Python
import hashlib, base64, secrets, string

# Allowed characters for the code verifier, per PKCE spec
allowed_chars = string.ascii_letters + string.digits + "-._~"

# Generate a secure code verifier (43–128 characters)
code_verifier = ''.join(secrets.choice(allowed_chars) for _ in range(64))

# Create the SHA256 hash of the code verifier
sha256_hash = hashlib.sha256(code_verifier.encode()).digest()

# Base64-url-encode the hash and strip any trailing '=' padding
code_challenge = base64.urlsafe_b64encode(sha256_hash).decode().rstrip("=")

# Output values
print(f"code_verifier: {code_verifier}")
print(f"code_challenge: {code_challenge}")

Étape 2 : Générer un code d'autorisation

Pour obtenir un jeton d'accès OAuth Databricks, vous devez d'abord générer un code d'autorisation OAuth. Ce code expire immédiatement après utilisation. Vous pouvez générer le code soit au niveau du compte, soit au niveau du Workspace.

  • Niveau du compte : Utilisez pour appeler les API REST au niveau du compte et au niveau du Workspace sur tous les Workspaces auxquels votre utilisateur peut accéder.
  • Niveau Workspace : utilisez-le pour appeler des APIs REST au sein d'un seul Workspace.
remarque

Ces exemples utilisent databricks-cli comme ID client. Si vous n'utilisez pas d'outil Databricks intégré tel que la CLI ou les SDK, vous devez activer une application OAuth personnalisée et utiliser son client_id dans vos requêtes. Voir Activer ou désactiver les applications OAuth partenaires.

Générer un code d'autorisation au niveau du compte

  1. Localisez votre ID de compte.

  2. Dans votre navigateur, accédez à l'URL avec les remplacements suivants :

    • <account-id>: Votre ID de compte Databricks
    • <redirect-url>: Un URI de redirection local (par exemple, http://localhost:8020)
    • <state>: toute chaîne de texte brut pour valider la réponse
    • <code-challenge>: Le défi de code de l'Étape 1
    https://accounts.cloud.databricks.com/oidc/accounts/<account-id>/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
  3. Connectez-vous lorsque vous y êtes invité pour accéder à votre compte Databricks.

  4. Après vous être connecté, le navigateur accède à votre URL de redirection . Si rien n’écoute sur cet hôte et ce port (par exemple, http://localhost:8020), la page affiche une erreur de connexion, ce qui est normal. Copiez le code d'autorisation de la barre d'adresse . Il s'agit de la sous-chaîne après code= et avant le prochain & dans la chaîne de query.

    http://localhost:8020/?code=dcod...7fe6&state=<state>

    Vérifiez que la valeur state correspond à ce que vous avez fourni à l’origine. Si ce n’est pas le cas, annulez le code.

  5. Continuez vers Générer un jeton d’accès au niveau du compte.

Générer un code d'autorisation au niveau du Workspace

  1. Dans votre navigateur, accédez à l'URL avec les remplacements suivants :

    • <databricks-instance>: votre <databricks-instance> avec le nom de l'instance de Workspace Databricks, par exemple dbc-a1b2345c-d6e7.cloud.databricks.com
    • <redirect-url>: une redirection locale (par exemple, http://localhost:8020)
    • <state>: toute valeur en texte brut pour la validation de la réponse
    • <code-challenge>: la chaîne de défi de l’étape 1
    https://<databricks-instance>/oidc/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
  2. Connectez-vous lorsque vous y êtes invité pour accéder à votre compte Databricks.

  3. Après vous être connecté, le navigateur accède à votre URL de redirection . Si rien n’écoute sur cet hôte et ce port (par exemple, http://localhost:8020), la page affiche une erreur de connexion, ce qui est normal. Copiez le code d'autorisation de la barre d'adresse . C'est la sous-chaîne après code= et avant le & suivant dans la chaîne de query.

    http://localhost:8020/?code=dcod...7fe6&state=<state>

    Vérifiez que la valeur state correspond à ce que vous avez fourni à l’origine. Si ce n’est pas le cas, annulez le code.

  4. Poursuivez vers Générer un jeton d'accès au Workspace.

remarque

Pour générer un jeton restreint à un rôle, ajoutez &assume_group=<group-id> à l'URL d'autorisation, où <group-id> est l'ID du groupe de support du rôle. Le jeton résultant autorise toutes les opérations au titre du rôle. Voir API (échange de jetons OAuth).

Étape 3 : Échangez le code d'autorisation contre un jeton d'accès

Pour échanger le code d'autorisation contre un jeton d'accès Databricks OAuth, choisissez le niveau approprié :

  • Niveau du compte : Utilisez pour appeler les API REST au niveau du compte et de l’espace de travail, pour tous les Workspace auxquels votre utilisateur peut accéder.
  • Niveau Workspace : utilisez-le pour appeler des APIs REST au sein d'un seul Workspace.

Générer un jeton d'accès au niveau du compte

  1. Utilisez curl pour échanger le code d'autorisation au niveau du compte contre un jeton d'accès OAuth.

    Remplacez les éléments suivants dans la requête :

    • <account-id>: Votre ID de compte Databricks
    • <redirect-url>: L’URL de redirection de l’étape précédente
    • <code-verifier>: le vérificateur que vous avez généré précédemment
    • <authorization-code>: Le code d'autorisation de l'étape précédente
    Bash
    curl --request POST \
    https://accounts.cloud.databricks.com/oidc/accounts/<account-id>/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
  2. Copiez la valeur access_token de la réponse. Par exemple :

    JSON
    {
    "access_token": "eyJr...Dkag",
    "refresh_token": "doau...f26e",
    "scope": "all-apis offline_access",
    "token_type": "Bearer",
    "expires_in": 3600
    }

    Le jeton est valide pendant une heure.

  3. Passez à Étape 4: Appel d'une API REST Databricks.

Générez un jeton d'accès au niveau du Workspace

  1. Utilisez curl pour échanger le code d'autorisation au niveau du workspace contre un jeton d'accès OAuth.

    Remplacez les éléments suivants dans la requête :

    • <databricks-instance>: votre <databricks-instance> avec le nom de l'instance de Workspace Databricks, par exemple dbc-a1b2345c-d6e7.cloud.databricks.com
    • <redirect-url>: L’URL de redirection de l’étape précédente
    • <code-verifier>: le vérificateur que vous avez généré précédemment
    • <authorization-code>: le code d'autorisation au niveau du workspace
    Bash
    curl --request POST \
    https://<databricks-instance>/oidc/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
  2. Copiez la valeur access_token de la réponse. Par exemple :

    JSON
    {
    "access_token": "eyJr...Dkag",
    "refresh_token": "doau...f26e",
    "scope": "all-apis offline_access",
    "token_type": "Bearer",
    "expires_in": 3600
    }

    Le jeton est valide pendant une heure.

Étape 4 : Appelez une API REST Databricks

Utilisez le jeton d’accès pour appeler les API REST au niveau du compte ou du Workspace, selon sa portée. Pour appeler les APIs au niveau du compte, votre utilisateur Databricks doit être un administrateur de compte.

Exemple de requête API REST au niveau du compte

Cet exemple utilise curl ainsi que l'authentification Bearer pour obtenir une liste de tous les Workspaces associés à un compte.

  • Remplacez <oauth-access-token> par le jeton d'accès OAuth au niveau du compte.
  • Remplacez <account-id> par votre ID de compte.
Bash
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/workspaces"

Exemple de requête d'API REST au niveau Workspace

Cet exemple utilise curl avec l'authentification Bearer pour lister tous les clusters disponibles dans le Workspace spécifié.

  • Remplacez <oauth-access-token> par le jeton d'accès OAuth au niveau du compte ou du workspace.
  • Remplacez <databricks-instance> par le nom de l'instance de workspace Databricks, par exemple dbc-a1b2345c-d6e7.cloud.databricks.com.
Bash
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://<databricks-instance>/api/2.0/clusters/list"

S'authentifier en tant que Service Principal à l'aide d'OAuth U2M

info

Bêta

Cette fonctionnalité est en Bêta. Les administrateurs du Workspace peuvent contrôler l'accès à cette fonctionnalité à partir de la page Previews . Consultez Gérer les aperçus Databricks.

Utilisez le flux OAuth U2M standard pour obtenir un jeton au nom d'un Service Principal Databricks et accédez aux APIs Databricks en utilisant l'identité du Service Principal au lieu de votre propre compte d'utilisateur.

Vous devez disposer du rôle de Gestionnaire de Service Principal sur le Service Principal pour lequel vous souhaitez vous authentifier. Si vous avez créé le Service Principal, vous disposez automatiquement de ce rôle. Consultez Rôles pour la gestion des Service Principals.

  1. Lancez le flux U2M standard. L’exemple suivant utilise la CLI Databricks :

    databricks auth login --host <workspace-url>
  2. Une fenêtre de navigateur s'ouvre pour l'autorisation. Dans le menu déroulant, sélectionnez le Service Principal pour vous authentifier, puis autorisez l'application.

  3. Le jeton OAuth est émis avec l’identité du Service Principal. La revendication sub dans le jeton correspond au service principal sélectionné. Pour afficher le jeton, exécutez :

    databricks auth token --host <workspace-url>

Ce flux fonctionne avec toute application prenant en charge l'authentification U2M standard. Pour connaître les étapes complètes, consultez Autorisation automatique avec authentification unifiée ou Générer manuellement des jetons d'accès OAuth U2M.

Gérez votre consentement OAuth

Pendant le flux d'autorisation OAuth U2M, votre navigateur peut afficher un écran de consentement vous demandant d'approuver les champs d'application demandés par une application. Vous pouvez consulter ou révoquer le consentement déjà accordé.

Pour afficher ou révoquer le consentement, vous avez besoin de l'ID d'intégration de l'application. Si l'application est une application Databricks, obtenez l'ID du champ oauth2_app_client_id en appelant l'API REST Get an app. Pour configurer les étendues pour les Databricks Apps, consultez Ajouter des étendues à une application. Pour les autres applications, contactez votre administrateur de compte.

Pour consulter les champs d'application approuvés pour une application :

Bash
curl --request GET \
--header "Authorization: Bearer $OAUTH_TOKEN" \
"https://<databricks-instance>/api/2.0/oauth-app-integrations/<app-integration-id>/user-consent/me"

Pour révoquer le consentement que vous avez accordé à une application :

Bash
curl --request DELETE \
--header "Authorization: Bearer $OAUTH_TOKEN" \
"https://<databricks-instance>/api/2.0/oauth-app-integrations/<app-integration-id>/user-consent/me"
remarque

La révocation du consentement n'invalide pas les jetons existants. L'application peut toujours utiliser les jetons refresh existants pour obtenir de nouveaux jetons d'accès jusqu'à ce que ces jetons expirent. Après expiration, l'application ne peut pas initier un nouveau flux d'autorisation pour obtenir de nouveaux jetons.

Remplacer ce qui suit :

  • <databricks-instance>: votre <databricks-instance> avec le nom de l'instance de Workspace Databricks, par exemple dbc-a1b2345c-d6e7.cloud.databricks.com
  • <app-integration-id>: l'identifiant d'intégration d'application