适用于: 适用于 Python 的 Azure 机器学习 SDK v1
适用于 Python 的 Azure 机器学习 SDK v1
重要
本文提供有关使用 Azure 机器学习 SDK v1 的信息。 SDK v1 自 2025 年 3 月 31 日起弃用。 对它的支持将于 2026 年 6 月 30 日结束。 可以在该日期之前安装和使用 SDK v1。 使用 SDK v1 的现有工作流将在支持结束日期后继续运行。 但是,在产品发生体系结构更改时,可能会面临安全风险或中断性变更。
建议在 2026 年 6 月 30 日之前过渡到 SDK v2。 有关 SDK v2 的详细信息,请参阅 什么是 Azure 机器学习 CLI 和 Python SDK v2? 以及 SDK v2 参考。
使用 Azure 机器学习,可以将经过训练的机器学习模型部署为 Web 服务。 本文介绍如何为这些部署配置身份验证。
可以将 Azure 机器学习创建的模型部署配置为使用两种身份验证方法之一:
- 基于密钥:使用静态密钥向 Web 服务进行身份验证。 
- 基于令牌:必须从 Azure 机器学习工作区(使用 Microsoft Entra ID)获取临时令牌,并用于向 Web 服务进行身份验证。 此令牌在一段时间后将过期,并且必须刷新才能继续使用 Web 服务。 - 注意 - 只有部署到 Azure Kubernetes 服务时,基于令牌的身份验证才适用。 
基于密钥的身份验证
部署在 Azure Kubernetes 服务 (AKS) 上的 Web 服务默认情况下会启用基于密钥的身份验证。
默认情况下,Azure 容器实例(ACI)部署的服务 已禁用 基于密钥的身份验证,但可以在创建 ACI Web 服务时进行设置 auth_enabled=True 来启用它。 以下代码是一个示例,演示了如何创建启用了基于密钥的身份验证的 ACI 部署配置。
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(cpu_cores = 1,
                                                memory_gb = 1,
                                                auth_enabled=True)
然后可以通过 Model 类在部署中使用自定义 ACI 配置。
from azureml.core.model import Model, InferenceConfig
inference_config = InferenceConfig(entry_script="score.py",
                                   environment=myenv)
aci_service = Model.deploy(workspace=ws,
                       name="aci_service_sample",
                       models=[model],
                       inference_config=inference_config,
                       deployment_config=aci_config)
aci_service.wait_for_deployment(True)
若要提取身份验证密钥,请使用 aci_service.get_keys()。 若要重新生成密钥,请使用 regen_key() 函数并传递“主要”或“辅助”密钥 。
aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")
基于令牌的身份验证
如果要为 Web 服务启用令牌身份验证,用户必须向 Web 服务提供 Azure 机器学习 JSON Web 令牌才能访问。 令牌在指定的时间范围后过期,需要刷新才能继续调用。
- 部署到 Azure Kubernetes 服务时,会默认禁用令牌身份验证。
- 部署到 Azure 容器实例时,不支持令牌身份验证。
- 令牌身份验证不能与基于密钥的身份验证同时使用。
若要控制令牌身份验证,请在创建或更新部署时使用 token_auth_enabled 参数:
from azureml.core.webservice import AksWebservice
from azureml.core.model import Model, InferenceConfig
# Create the config
aks_config = AksWebservice.deploy_configuration()
#  Enable token auth and disable (key) auth on the webservice
aks_config = AksWebservice.deploy_configuration(token_auth_enabled=True, auth_enabled=False)
aks_service_name ='aks-service-1'
# deploy the model
aks_service = Model.deploy(workspace=ws,
                           name=aks_service_name,
                           models=[model],
                           inference_config=inference_config,
                           deployment_config=aks_config,
                           deployment_target=aks_target)
aks_service.wait_for_deployment(show_output = True)
如果启用了令牌身份验证,可以使用 get_token 方法检索 JSON Web (JWT) 令牌以及该令牌的到期时间:
提示
如果使用服务主体获取令牌,并希望它具有检索令牌所需的最小访问权限,请向其分配工作区的“读取者”角色。
token, refresh_by = aks_service.get_token()
print(token)
重要
需要在令牌的 refresh_by 时间后请求一个新令牌。 如果需要刷新 Python SDK 外的令牌,一个选择是使用服务主体身份验证的 REST API 定期进行 service.get_token() 调用,如前文所述。
我们强烈建议在 Azure Kubernetes 服务群集所在的相同区域中创建 Azure 机器学习工作区。
若要使用令牌进行身份验证,Web 服务将调用在其中创建 Azure 机器学习工作区的区域。 如果工作空间所在的区域不可用,即使群集位于不同的区域,也无法请求 Web 服务的标识。 结果是直到工作区的区域再次可用时,Microsoft Entra 身份验证才可用。
此外,群集区域与工作区区域之间的距离越大,提取令牌所需的时间就越长。
后续步骤
若要详细了解如何向已部署的模型进行身份验证,请参阅为部署为 Web 服务的模型创建客户端。