Authentifiez-vous à l’aide d’un jeton du fournisseur d’identité
Cette page explique comment s'authentifier auprès de Databricks à l'aide d'un jeton émis par le fournisseur d'identité de votre organisation.
Databricks prend en charge l'échange de jetons OAuth 2.0 pour vous permettre d'échanger un jeton d'identité fédérée contre un jeton OAuth Databricks. Avec la fédération de jetons, le CLI Databricks, les SDK et d'autres outils peuvent gérer automatiquement cet échange et gérer les jetons d'accès pour vous.
La durée de vie de chaque jeton d'accès est dérivée de la durée de vie du jeton fédéré que vous fournissez, qui est le plus souvent d'une heure mais peut varier. Les outils refresh les jetons automatiquement selon les besoins, vous n'avez donc pas besoin de demander ou de faire pivoter manuellement les identifiants.
Processus d'authentification
Pour authentifier l’accès à l’API Databricks avec un jeton d’un fournisseur d’identité fédéré, définissez d’abord les variables d’environnement ou les champs de configuration requis. Votre outil préféré ou votre SDK récupère le jeton web JSON (JWT) fédéré à partir de l’emplacement que vous spécifiez, l’échange contre un jeton OAuth Databricks et utilise le jeton OAuth pour authentifier les appels de l’API REST Databricks.
Prérequis
Avant de commencer, suivez les étapes suivantes :
- Créez une politique de fédération pour votre compte ou votre service principal.
- Obtenez un JWT valide auprès de votre fournisseur d'identité qui correspond à la politique. Les jetons doivent être signés à l'aide de RS256 ou ES256. Les étapes varient selon le fournisseur, donc consultez la documentation de votre fournisseur ou demandez à un administrateur.
Configurez votre environnement
Configurez votre environnement en fonction de l'origine de votre jeton fédéré. Définissez les variables d'environnement, les champs .databrickscfg, les champs Terraform ou les champs Config suivants :
- Hôte Databricks :
https://accounts.cloud.databricks.compour les opérations de compte ou l'URL du workspace cible, par exemplehttps://dbc-a1b2345c-d6e7.cloud.databricks.compour les opérations de workspace. - ID de compte Databricks : requis uniquement si l'hôte est l'URL de la console de compte.
- ID client du Service Principal : Requis uniquement pour la fédération d'identité de charge de travail. Ne doit pas être défini si l'authentification est effectuée à l'aide d'une politique de fédération de jetons à l'échelle du compte.
- Type d'authentification Databricks :
env-oidcsi le jeton provient d'une variable d'environnement.file-oidcsi le jeton provient d'un fichier. - Variable d'environnement du jeton OIDC : Le nom de la variable d'environnement qui contient le jeton. Requis uniquement si la méthode d'authentification est
env-oidc. Par default, la valeur estDATABRICKS_OIDC_TOKEN. - **Chemin du fichier du jeton OIDC :** Chemin du fichier qui contient le jeton fédéré. Requis uniquement si la méthode d'authentification est
file-oidc.
Pour une référence complète de toutes les variables d’environnement et de tous les champs de configuration d’authentification unifiée, consultez Variables d’environnement et champs pour l’authentification unifiée.
Choisissez votre méthode de configuration préférée pour configurer l'environnement d'authentification :
- Environment
- Profile
- CLI
- Connect
- VS Code
- Terraform
- Python
- Java
- Go
Définissez les variables d'environnement suivantes :
export DATABRICKS_HOST=<workspace-url-or-account-console-url>
export DATABRICKS_ACCOUNT_ID=<account-id> # If DATABRICKS_HOST is the account console URL
export DATABRICKS_CLIENT_ID=<client-id> # Only for workload identity federation
export DATABRICKS_AUTH_TYPE=<auth-method> # env-oidc or file-oidc
export DATABRICKS_OIDC_TOKEN_ENV=<token-env-name> # If auth type is env-oidc
export DATABRICKS_OIDC_TOKEN_FILEPATH=<token-filepath-name> # If auth type is file-oidc
Créez ou identifiez un .databrickscfg profil de configuration avec les champs suivants :
[<profile-name>]
host = <workspace-url-or-account-console-url>
account_id = <account-id> # If host is the account console URL
client_id = <client-id> # Only for workload identity federation
auth_type = <auth-method> # env-oidc or file-oidc
oidc_token_env = <token-env-name> # If auth type is env-oidc
oidc_token_filepath = <token-filepath-name> # If auth type is file-oidc
Pour la CLI Databricks, effectuez l'une des opérations suivantes :
- Définissez les variables d'environnement telles que spécifiées sous l'onglet tab .
- Définissez les valeurs dans votre fichier
.databrickscfgcomme spécifié sur l'onglet tab .
Les variables d'environnement ont toujours la priorité sur les valeurs de votre fichier .databrickscfg.
Pour Databricks Connect, vous pouvez :
- Utiliser un profil de configuration : Définissez les valeurs au niveau du Workspace dans votre fichier
.databrickscfgcomme décrit dans l'onglet tab . Définissez également lacluster_idsur l'URL de votre instance de workspace. - Utiliser les variables d'environnement : Définissez les mêmes valeurs que celles affichées dans l'onglet tab . Définissez également le
DATABRICKS_CLUSTER_IDsur l'URL de l'instance de votre Workspace.
Les valeurs dans .databrickscfg ont priorité sur les variables d'environnement.
Pour initialiser Databricks Connect avec ces paramètres, consultez Configuration du compute pour Databricks Connect.
Pour l’extension Databricks pour Visual Studio Code, procédez comme suit :
- Définissez les valeurs dans votre
.databrickscfgfichier pour les opérations au niveau du Workspace Databricks comme spécifié sur l'onglet **tab**. - Dans le volet Configuration de l’extension Databricks pour Visual Studio Code, cliquez sur Configurer Databricks .
- Dans la **Palette de commandes**, pour **Hôte Databricks**, entrez l' URL de votre workspace, par exemple,
https://dbc-a1b2345c-d6e7.cloud.databricks.compuis appuyezEntersur. - Dans la Palette de commandes , sélectionnez le nom de votre profil cible dans la liste pour votre URL.
Pour plus de détails, consultez Configurez l'autorisation pour l'extension Databricks pour Visual Studio Code.
Pour les opérations au niveau du compte
provider "databricks" {
alias = "accounts"
}
Pour les opérations au niveau de Workspace :
provider "databricks" {
alias = "workspace"
}
Pour les opérations au niveau de Workspace :
from databricks.sdk import WorkspaceClient
# Uses environment configuration automatically
w = WorkspaceClient()
Pour les opérations au niveau du compte :
from databricks.sdk import AccountClient
# Uses environment configuration automatically
a = AccountClient()
Pour les opérations au niveau de Workspace :
import com.databricks.sdk.WorkspaceClient;
// Uses environment configuration automatically
WorkspaceClient w = new WorkspaceClient();
Pour les opérations au niveau du compte :
import com.databricks.sdk.AccountClient;
// Uses environment configuration automatically
AccountClient a = new AccountClient();
Pour les opérations au niveau de Workspace :
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())
Pour les opérations au niveau du compte :
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())
Pour plus d'information sur l'authentification avec les outils Databricks et les SDK qui utilisent Go et qui implémentent l' authentification unifiée client Databricks, consultez Authentifier le SDK Databricks pour Go avec votre compte ou Workspace Databricks.
Accéder aux APIs Databricks
Après avoir configuré votre environnement, vous pouvez utiliser la CLI Databricks et les SDK normalement. Ils gèrent automatiquement l'échange de jetons et utilisent le jeton OAuth résultant pour l'authentification de l'API.
- CLI
- Python
- Java
- Go
databricks clusters list
from databricks.sdk import WorkspaceClient
w = WorkspaceClient() # Uses environment configuration
clusters = w.clusters.list()
import com.databricks.sdk.WorkspaceClient;
WorkspaceClient w = new WorkspaceClient();
List<ClusterDetails> clusters = w.clusters().list();
import "github.com/databricks/databricks-sdk-go"
w := databricks.Must(databricks.NewWorkspaceClient())
clusters := w.Clusters.ListAll(context.Background(), compute.List{})
Implémenter un fournisseur d'autorisation personnalisé
Si votre jeton fédéré provient d'une source autre que des variables d'environnement ou un fichier, vous pouvez utiliser l'un des SDK Databricks pour écrire une implémentation personnalisée afin de récupérer votre jeton fédéré.
Charges de travail AWS IAM (Python)
L'exemple suivant utilise le modèle IdTokenSource avec AWS STS GetWebIdentityToken pour authentifier les charges de travail AWS auprès de Databricks :
import boto3
from databricks.sdk import WorkspaceClient
from databricks.sdk import oidc
from databricks.sdk.core import Config, credentials_strategy, oidc_credentials_provider
class AwsStsTokenSource(oidc.IdTokenSource):
def __init__(self, audience="databricks", region="us-east-1"):
self._audience = audience
self._region = region
def id_token(self) -> oidc.IdToken:
sts = boto3.client("sts", region_name=self._region)
resp = sts.get_web_identity_token(
Audience=[self._audience],
SigningAlgorithm="RS256",
DurationSeconds=300,
)
return oidc.IdToken(jwt=resp["WebIdentityToken"])
@credentials_strategy("aws-sts-wif", [])
def aws_sts_wif_strategy(cfg: Config):
return oidc_credentials_provider(cfg, AwsStsTokenSource())
w = WorkspaceClient(
host="https://my-workspace.cloud.databricks.com",
client_id="<service-principal-uuid>",
credentials_strategy=aws_sts_wif_strategy
)
# No secrets needed
clusters = w.clusters.list()
La durée des jetons de 300 secondes est recommandée. Vous pouvez ajuster jusqu'à 3 600 secondes en fonction des besoins de la charge de travail.
L'exemple suivant montre l'échange de jetons bruts pour comprendre le protocole :
import boto3
import requests
sts = boto3.client("sts", region_name="us-east-1")
resp = sts.get_web_identity_token(
Audience=["databricks"],
SigningAlgorithm="RS256",
DurationSeconds=300,
)
aws_jwt = resp["WebIdentityToken"]
token_resp = requests.post(
"https://<workspace>.cloud.databricks.com/oidc/v1/token",
data={
"client_id": "<service-principal-uuid>",
"grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
"subject_token": aws_jwt,
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
"scope": "all-apis",
},
)
access_token = token_resp.json()["access_token"]
Pour la configuration complète incluant les prérequis AWS et la création de la politique de fédération, consultez Activer la fédération d'identité des charges de travail pour les charges de travail AWS IAM.
Implémentation personnalisée générique
- Python
- Java
- Go
from databricks.sdk import oidc
from databricks.sdk.core import (Config, CredentialsProvider, credentials_strategy, oidc_credentials_provider)
class MyCustomIdTokenSource(oidc.IdTokenSource):
def id_token(self) -> oidc.IdToken:
token = ... # Implement logic to return the ID token here
return oidc.IdToken(jwt=token)
@credentials_strategy("my-custom-oidc", [])
def my_custom_oidc_strategy(cfg: Config) -> CredentialsProvider:
return oidc_credentials_provider(cfg, MyCustomIdTokenSource())
if __name__ == "__main__":
cfg = Config(
host="https://my-workspace.cloud.databricks.com",
credentials_strategy=my_custom_oidc_strategy
)
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(config=cfg)
# Use the client...
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
import com.databricks.sdk.core.CredentialsProvider;
import com.databricks.sdk.core.oauth.IDTokenSource;
import com.databricks.sdk.core.oauth.IDToken;
public class CustomOIDCExample {
// Custom IDTokenSource that returns an OIDC ID token
static class MyCustomIdTokenSource implements IDTokenSource {
@Override
public IDToken getIDToken(String audience) {
// TODO: Implement logic to fetch or generate the ID token
String jwt = "..."; // your OIDC token here
return new IDToken(jwt);
}
}
public static void main(String[] args) {
// TODO: Wrap MyCustomIdTokenSource in a CredentialsProvider
// See the SDK documentation for the appropriate method
CredentialsProvider provider = ...; // Configure with MyCustomIdTokenSource
// Configure with workspace host and custom OIDC provider
DatabricksConfig cfg = new DatabricksConfig()
.setHost("https://my-workspace.cloud.databricks.com")
.setCredentialsProvider(provider);
// Initialize the workspace client
WorkspaceClient w = new WorkspaceClient(cfg);
System.out.println("Databricks client initialized: " + w);
// Use the client...
}
}
Cet exemple montre comment implémenter un IDTokenSource personnalisé. Pour la dernière méthode de configuration d'un CredentialsProvider avec votre source de jetons personnalisée, consultez la documentation du SDK Databricks pour Java ou reportez-vous au code source du SDK sur GitHub.
package main
import (
"context"
"fmt"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/config"
"github.com/databricks/databricks-sdk-go/credentials"
)
// MyCustomIdTokenSource implements a custom OIDC token source
type MyCustomIdTokenSource struct{}
func (s *MyCustomIdTokenSource) IDToken(ctx context.Context) (*credentials.IDToken, error) {
// TODO: Implement logic to return the ID token
token := "..."
return &credentials.IDToken{JWT: token}, nil
}
// myCustomOIDCStrategy is a custom credentials strategy
func myCustomOIDCStrategy(cfg *config.Config) (credentials.CredentialsProvider, error) {
return credentials.NewOIDCCredentialsProvider(cfg, &MyCustomIdTokenSource{}), nil
}
func main() {
cfg := &config.Config{
Host: "https://my-workspace.cloud.databricks.com",
}
// Register the custom credentials strategy
credentials.Register("my-custom-oidc", myCustomOIDCStrategy)
// Initialize the Databricks workspace client with custom auth
w, err := databricks.NewWorkspaceClientWithConfig(cfg)
if err != nil {
panic(err)
}
fmt.Println("Databricks client initialized:", w)
// Use the client...
}
Échanger un jeton manuellement
Si vous n'utilisez pas les SDK Databricks, l'interface CLI ou d'autres outils qui prennent en charge l'authentification unifiée, vous pouvez échanger manuellement un JWT de votre fournisseur d'identité contre un jeton OAuth Databricks. Pour ce faire, envoyez une requête au Databricks Endpoint en utilisant l'échange de jetons OAuth 2.0 (RFC 8693).
Commencez par obtenir un JWT fédéré auprès de votre fournisseur d'identité en suivant sa documentation. Ensuite, échangez le JWT contre un jeton OAuth Databricks et utilisez ce jeton pour accéder aux APIs REST Databricks :

Échanger un JWT fédéré contre un jeton OAuth Databricks
Pour les politiques de fédération à l'échelle du compte, cette commande échange un JWT fédéré contre un jeton OAuth Databricks :
curl --request POST https://<databricks-workspace-host>/oidc/v1/token \
--data "subject_token=${FEDERATED_JWT_TOKEN}" \
--data 'subject_token_type=urn:ietf:params:oauth:token-type:jwt' \
--data 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data 'scope=all-apis'
Pour accéder aux Ressources du compte Databricks, utilisez l'URL https://<databricks-account-host>/oidc/accounts/<account-id>/v1/token.
Pour les politiques de fédération de Service Principal, incluez l'ID client dans la requête :
curl --request POST https://<databricks-workspace-host>/oidc/v1/token \
--data "client_id=${CLIENT_ID}" \
--data "subject_token=${FEDERATED_JWT_TOKEN}" \
--data 'subject_token_type=urn:ietf:params:oauth:token-type:jwt' \
--data 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data 'scope=all-apis'
Remplacez CLIENT_ID par l'UUID du Service Principal (par exemple, 7cb2f8a4-49a7-4147-83db-35cb69e5cede).
Si le jeton de votre fournisseur d'identité est valide et correspond à votre politique de fédération, vous recevez une réponse JSON standard qui inclut un jeton OAuth Databricks dans le champ access_token. Ce jeton OAuth peut être utilisé pour accéder aux APIs Databricks. Le jeton OAuth Databricks obtenu a la même revendication d'expiration (exp) que le JWT fourni dans le parameter subject_token.
Exemple de réponse :
{
"access_token": "eyJraWQ...odi0WFNqQw",
"scope": "all-apis",
"token_type": "Bearer",
"expires_in": 3600
}
Utilisez le jeton OAuth pour appeler les API Databricks
Vous pouvez ensuite utiliser le jeton OAuth Databricks résultant comme jeton de porteur pour accéder aux APIs Databricks. Par exemple, pour appeler l'API Databricks SCIM Me afin de récupérer votre utilisateur Databricks et votre nom d'affichage :
TOKEN='<your-databricks-oauth-token>'
curl --header "Authorization: Bearer $TOKEN" \
--url https://${DATABRICKS_WORKSPACE_HOSTNAME}/api/2.0/preview/scim/v2/Me
La réponse doit ressembler à ce qui suit :
{
"userName": "username@mycompany.com",
"displayName": "Firstname Lastname"
}