您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

服务请求失败。 状态: 404 找不到子域

本文介绍从 Azure 数字孪生服务请求收到 404 错误的原因和解决步骤。

症状

使用属于实例中不同 Azure Active Directory (Azure AD) 租户的服务主体或用户帐户来访问 Azure 数字孪生实例时,可能会发生此错误。 似乎向该标识分配了正确的角色,但 API 请求失败并出现错误状态 404 Sub-Domain not found

原因

原因 #1

Azure 数字孪生要求所有身份验证用户属于 Azure 数字孪生实例所属于的相同 Azure AD 租户。

因此,向 Azure 数字孪生 API 发出的请求需要一个用户或服务主体,并且该用户或服务主体应属于 Azure 数字孪生实例所驻留的同一租户。 为防止恶意扫描 Azure 数字孪生终结点,对于来自源租户外部的具有访问令牌的请求,会返回“404 子域未找到”错误消息。 即使用户或服务主体已通过 Azure AD B2B 协作获得 Azure 数字孪生数据所有者或 Azure 数字孪生数据读取者角色,也会返回此错误。

解决方案

解决方案 #1

若要解决此问题,可以让其他租户中的每个联合标识从 Azure 数字孪生实例的“主”租户请求令牌。

执行此操作的一种方法是使用以下 CLI 命令,其中 <home-tenant-ID> 是包含 Azure 数字孪生实例的 Azure AD 租户的 ID:

az account get-access-token --tenant <home-tenant-ID> --resource https://digitaltwins.azure.net

发出请求后,该标识将接收为 https://digitaltwins.azure.net Azure AD 资源颁发的令牌,该令牌具有与 Azure 数字孪生实例相匹配的租户 ID 声明。 如果在 API 请求或 Azure.Identity 代码中使用此令牌,应该可以使用联合标识访问 Azure 数字孪生资源。

解决方法 #2

如果在代码中使用 DefaultAzureCredential 类,并且在获取令牌后继续遇到此问题,则可以在 DefaultAzureCredential 选项中指定主租户以阐明租户,即便身份验证默认为其他类型。

以下示例演示如何在 DefaultAzureCredential 选项中设置 InteractiveBrowserTenantId 的租户 ID 值:

代码屏幕截图,显示 DefaultAzureCredentialOptions 方法。其中 InteractiveBrowserTenantId 的值设置为示例租户 ID 值。

有类似的选项可用于为租户设置对 Visual Studio 和 Visual Studio Code 的身份验证。 有关可用选项的详细信息,请参阅 DefaultAzureCredentialOptions 文档

后续步骤

阅读有关 Azure 数字孪生的安全性和权限的详细信息: