本文說明對 Azure Digital Twins 提出的服務要求發生 404 錯誤的原因和解決步驟。 本資訊是針對 Azure Digital Twins 服務。
徵兆
使用屬於與實例不同的 Microsoft Entra 租用戶 的服務主體或使用者帳戶存取 Azure Digital Twins 實例時,可能會發生此錯誤。 指派給身分識別的角色似乎正確,但 API 要求失敗,錯誤狀態為 404 Sub-Domain not found。
原因
原因 #1
Azure Digital Twins 要求所有驗證使用者都屬於與 Azure Digital Twins 執行個體相同的 Microsoft Entra 租用戶。
因此,對 Azure Digital Twins API 提出要求時,使用者或服務主體必須屬於 Azure Digital Twins 執行個體所在的相同租用戶。 若要防止對 Azure Digital Twins 端點進行惡意掃描,來自原始租使用者外部的存取令牌要求會傳回「找不到 404 Sub-Domain」錯誤訊息。 即使使用者或服務主體已透過 Microsoft Entra B2B 共同作業獲得 Azure Digital Twins 資料擁有者或 Azure Digital Twins 資料讀者角色,也會傳回此錯誤。
方案
解決方案 #1
您可以讓另一個租用戶的每個同盟身分識別向 Azure Digital Twins 執行個體的「主」租用戶要求權杖,以解決此問題。
方法之一是使用下列 CLI 命令,其中 <home-tenant-ID> 是包含 Azure Digital Twins 執行個體的 Microsoft Entra 租用戶識別碼:
az account get-access-token --tenant <home-tenant-ID> --resource https://digitaltwins.azure.net
提出此要求之後,身分識別會收到發給https://digitaltwins.azure.net Microsoft Entra 資源的權杖,該權杖具有與 Azure Digital Twins 執行個體相符的租用戶識別碼宣告。 在 API 要求中或透過 Azure.Identity 程式碼使用此權杖,應該就可讓同盟身分識別存取 Azure Digital Twins 資源。
解決方案 #2
如果您在程式碼中使用 DefaultAzureCredential 類別,且在取得權杖之後持續遇到此問題,您可以在 DefaultAzureCredential 選項中指定主租用戶,即使驗證預設為另一種類型,也能指明租用戶。
下列範例顯示如何在 InteractiveBrowserTenantId 選項的 DefaultAzureCredential 中設定範例租用戶識別碼值:
public class DefaultAzureCredentialOptionsSample
{
// The URL of your instance, starting with the protocol (https://)
private const string adtInstanceUrl = "https://<your-Azure-Digital-Twins-instance-URL>";
private static DefaultAzureCredentialOptions credentialOptions = new DefaultAzureCredentialOptions()
{
ExcludeSharedTokenCacheCredential = true,
ExcludeVisualStudioCodeCredential = true,
TenantId = "<your-Azure-Active-Directory-tenant-ID>"
};
private static DefaultAzureCredential credential = new DefaultAzureCredential(credentialOptions);
DigitalTwinsClient client = new DigitalTwinsClient(new Uri(adtInstanceUrl), credential);
}
Visual Studio 和 Visual Studio Code 有類似的選項可設定要驗證的租用戶。 如需可用選項的詳細資訊,請參閱 DefaultAzureCredentialOptions 文件。
下一步
深入了解 Azure Digital Twins 的安全性和權限: