Compartir a través de


Solución de problemas de una solicitud de servicio que ha generado error en Azure Digital Twins: error 404 (subdominio no encontrado)

En este artículo se describen las causas y los pasos de resolución al recibir un error 404 de las solicitudes de servicio a Azure Digital Twins. Esta información es específica del servicio Azure Digital Twins.

Síntomas

Este error puede producirse al acceder a una instancia de Azure Digital Twins mediante una entidad de servicio o una cuenta de usuario que pertenezca a un inquilino de Microsoft Entra diferente de la instancia. Al parecer, los roles correctos se asignan a la identidad, pero las solicitudes de API fallan y devuelven un estado de error de 404 Sub-Domain not found.

Causas

Causa 1

Azure Digital Twins requiere que todos los usuarios autenticados pertenezcan al mismo inquilino de Microsoft Entra que la instancia de Azure Digital Twins.

Como resultado, las solicitudes a las API de Azure Digital Twins requieren un usuario o una entidad de servicio que forme parte del mismo inquilino donde reside la instancia de Azure Digital Twins. Para evitar el escaneo malintencionado de los puntos de conexión de Azure Digital Twins, las solicitudes con tokens de acceso desde fuera de la entidad de origen devuelven un mensaje de error "404 Sub-Domain no encontrado". Este error se devuelve incluso si el usuario o la entidad de servicio recibió un rol de Propietario de Datos de Azure Digital Twins o Lector de Datos de Azure Digital Twins mediante la colaboración de Microsoft Entra B2B.

Soluciones

Solución 1

Para resolver este problema, puede hacer que cada identidad federada de otro inquilino solicite un token al inquilino "principal" de la instancia de Azure Digital Twins.

Una manera de hacerlo es con el siguiente comando de la CLI, donde <home-tenant-ID> es el identificador del inquilino de Microsoft Entra que contiene la instancia de Azure Digital Twins:

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

Después esta solicitud, la identidad recibe un token emitido para el recurso https://digitaltwins.azure.net Microsoft Entra, que tiene una notificación de identificador de inquilino coincidente a la instancia de Azure Digital Twins. El uso de este token en las solicitudes de API o con el código Azure.Identity, permitirá que la identidad federada acceda al recurso de Azure Digital Twins.

Solución 2

Si usa la clase DefaultAzureCredential en el código y el problema no desaparece después de obtener un token, puede especificar el inquilino principal en las opciones de DefaultAzureCredential para aclarar el inquilino, incluso cuando la autenticación tome otro tipo como valor predeterminado.

En el ejemplo siguiente se muestra cómo establecer un valor de identificador de inquilino de ejemplo para InteractiveBrowserTenantId en las opciones de 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);
}

Hay opciones similares disponibles para establecer un inquilino para la autenticación con Visual Studio y Visual Studio Code. Para obtener más información sobre las opciones disponibles, consulte la documentación de DefaultAzureCredentialOptions.

Pasos siguientes

Obtenga más información sobre la seguridad y los permisos de Azure Digital Twins: