You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure ML Client认证问题:如何实现无浏览器透明认证?

实现Azure ML Client在Spark集群上的无交互式认证

核心原因

DefaultAzureCredential默认会按优先级尝试多种认证方式,当托管标识认证失败时,会自动 fallback 到交互式浏览器认证,这就是首次运行出现登录提示的原因。第二次运行的无提示是依赖临时缓存,无法保证长期稳定性。

解决方案

方案1:直接使用ClientSecretCredential(推荐)

既然已经配置了服务主体的相关环境变量,直接使用ClientSecretCredential可以跳过所有其他认证方式,确保仅使用服务主体认证,彻底避免交互式提示:

import os
from azure.ai.ml import MLClient
from azure.identity import ClientSecretCredential

# 配置环境变量(若已在集群环境中全局设置可省略)
os.environ["AZURE_SUBSCRIPTION_ID"] = subscription_id
os.environ["AZURE_RESOURCE_GROUP"] = resource_group
os.environ["AZURE_CLIENT_ID"] = client_id
os.environ["AZURE_TENANT_ID"] = tenant_id
os.environ["AZURE_CLIENT_SECRET"] = client_secret

# 初始化服务主体凭证
credential = ClientSecretCredential(
    tenant_id=os.environ["AZURE_TENANT_ID"],
    client_id=os.environ["AZURE_CLIENT_ID"],
    client_secret=os.environ["AZURE_CLIENT_SECRET"]
)

# 初始化ML Client
ml_client = MLClient(
    credential=credential,
    subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
    resource_group_name=os.environ["AZURE_RESOURCE_GROUP"],
    workspace_name=workspace_name
)

方案2:修改DefaultAzureCredential参数排除交互式认证

如果仍想保留DefaultAzureCredential的多方式尝试逻辑,但要禁止交互式浏览器认证,可以添加exclude_interactive_browser_credential=True参数:

import os
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

os.environ["AZURE_ML_CLI_PRIVATE_FEATURES_ENABLED"] = "true"
os.environ["AZURE_SUBSCRIPTION_ID"] = subscription_id
os.environ["AZURE_RESOURCE_GROUP"] = resource_group
os.environ["AZURE_CLIENT_ID"] = client_id
os.environ["AZURE_TENANT_ID"] = tenant_id
os.environ["AZURE_CLIENT_SECRET"] = client_secret

# 排除交互式浏览器认证,避免触发登录提示
credential = DefaultAzureCredential(
    managed_identity_client_id=client_id,
    exclude_interactive_browser_credential=True
)
credential.get_token("https://management.azure.com/.default", tenant_id=tenant_id )
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)

注意事项

  • 确保服务主体(AZURE_CLIENT_ID对应的应用)已被授予Azure ML工作区的访问权限(如Contributor或Reader角色)
  • 若Spark集群已配置托管标识,且该标识有对应访问权限,也可直接使用ManagedIdentityCredential进一步简化认证流程

内容的提问来源于stack exchange,提问作者Cengiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:24