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

Azure ML脚本DeviceCodeCredentials缓存失效问题求助

解决方案:修复Azure ML DeviceCodeCredential凭据缓存失效问题

核心问题分析

你遇到的缓存失效问题,主要是对TokenCachePersistenceOptions的name参数用法理解错误,加上缺少显式租户ID指定导致的。以下是具体修复步骤:


1. 修正TokenCachePersistenceOptions配置

name参数不是文件路径,而是缓存的唯一标识,SDK会自动在~/.azure目录下生成对应缓存文件(格式为msal_token_cache-{name}.json)。之前传入完整路径会导致SDK无法正确识别和加载缓存。

2. 显式指定租户ID

默认情况下DeviceCodeCredential可能会自动解析租户,但这容易导致缓存令牌与后续请求的租户不匹配,必须显式指定tenant_id确保一致性。

3. 确保缓存文件权限

Linux环境下,~/.azure目录需设置为当前用户可读写(权限建议700),避免因权限不足无法写入/读取缓存。


修改后的完整代码

import os
from azure.ai.ml import MLClient
from azure.identity import DeviceCodeCredential, TokenCachePersistenceOptions
from .constants import AML_SUBSCRIPTION_ID, AML_RESOURCE_GROUP, AML_WORKSPACE, AML_TENANT_ID  # 新增租户ID常量

# 仅指定缓存名称,SDK自动处理路径
cache_name = "azure_ml_pipeline_cache"
token_cache_options = TokenCachePersistenceOptions(
    name=cache_name,
    allow_unencrypted_storage=True  # 无GUI环境必须开启,避免依赖密钥环
)

# 显式传入租户ID,避免租户解析不一致
credential = DeviceCodeCredential(
    tenant_id=AML_TENANT_ID,
    token_cache_persistence_options=token_cache_options
)

client = MLClient(
    credential=credential,
    subscription_id=AML_SUBSCRIPTION_ID,
    resource_group_name=AML_RESOURCE_GROUP,
    workspace_name=AML_WORKSPACE,
)

# 触发认证(缓存有效时自动复用)
jobs = client.jobs.list()
_ = [j.name for j in jobs]

额外排查步骤

  • 清理无效缓存:删除~/.azure目录下旧的缓存文件(比如你之前生成的msal_token_cache.json),重新运行脚本生成新的有效缓存。
  • 升级SDK版本:旧版本可能存在缓存逻辑bug,执行pip install --upgrade azure-identity azure-ai-ml更新到最新稳定版。
  • 验证缓存加载:可以在代码中添加日志,检查令牌是否从缓存获取:
    from azure.core.credentials import AccessToken
    token = credential.get_token("https://ml.azure.com/.default")
    print(f"Token acquired from cache: {token.expires_on > time.time()}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:00:10