Autenticar solicitudes en Azure Batch

Se debe autenticar cada solicitud realizada en el servicio Batch. El servicio Batch admite la autenticación mediante clave compartida o Microsoft Entra ID.

Autenticación mediante clave compartida

Una solicitud autenticada requiere dos encabezados: el encabezado Date o ocp-date y el encabezado Authorization . En las secciones siguientes se describe cómo construir estos encabezados.

Especificar el encabezado de fecha

Todas las solicitudes autenticadas deben incluir la marca de tiempo de hora universal coordinada (UTC) para la solicitud. Puede especificar la marca de tiempo en el encabezado ocp-date o en el encabezado de fecha HTTP/HTTPS estándar. Si se especifican ambos encabezados para la solicitud, el valor de ocp-date se usa como hora de creación de la solicitud.

El servicio de lotes debe recibir una solicitud en el plazo de 15 minutos desde su creación. Al hacerlo, el servicio está protegido frente a ataques de seguridad, como ataques de reproducción. El encabezado ocp-date se proporciona porque algunas bibliotecas de cliente HTTP y servidores proxy establecen automáticamente el encabezado Date y no le dan la oportunidad de leer su valor para incluirlo en la solicitud autenticada. Si establece ocp-date, construya la firma con un valor vacío para el encabezado Date .

Especificar el encabezado de autorización

Una solicitud autenticada debe incluir el encabezado Authorization . Para autenticar una solicitud, debe firmarla con la clave de la cuenta que la realiza y pasar esa firma como parte de la solicitud.

El formato del encabezado Authorization es el siguiente:

Authorization="SharedKey <AccountName>:<Signature>"  

SharedKey es el nombre del esquema de autorización, AccountName es el nombre de la cuenta que solicita el recurso y Signature es un código de autentificación de mensajes basado en hash (HMAC) construido a partir de la solicitud, calculado mediante el algoritmo SHA256 y, por último, codificado utilizando la codificación Base64.

En las secciones siguientes se describe cómo construir el encabezado Authorization .

Construir la cadena de firma

Al construir la cadena de firma, tenga en cuenta lo siguiente:

  • La parte VERB de la cadena es el verbo HTTP, como GET o POST, y debe estar en mayúsculas.

  • Cada encabezado incluido en la cadena de firma puede aparecer solo una vez.

  • Los valores de todos los encabezados HTTP estándar deben incluirse en la cadena en el orden mostrado en el formato de la firma, sin los nombres de encabezado. Estos encabezados pueden estar vacíos si no se especifican como parte de la solicitud; en ese caso, solo se requiere el carácter de nueva línea.

  • Cuando el verbo es POST, los valores Content-Type y Content-Length son necesarios como encabezados de solicitud y como valores de la cadena de firma. Content-Type debe establecerse en application/json; odata=minimalmetadata.

  • Si se especifica el encabezado ocp-date , el encabezado Date no es obligatorio, simplemente especifique una línea vacía para la parte Date de la cadena de firma. En este caso, siga las instrucciones de la sección Construcción de la cadena de encabezados canónicos para agregar el encabezado ocp-date .

  • Todos los caracteres de nueva línea (\n) mostrados se deben incluir en la cadena de firma.

  • Para obtener información detallada acerca de la construcción de las cadenas CanonicalizedHeaders y CanonicalizedResource que forman parte de la cadena de firma, vea las secciones adecuadas más adelante en este tema.

Para codificar la cadena de firma de una solicitud en el servicio Batch, utilice el formato siguiente:

  
StringToSign = VERB + "\n" +  
  Content-Encoding + "\n"  
  Content-Language + "\n"  
  Content-Length + "\n"  
  Content-MD5 + "\n"  
  Content-Type + "\n" +  
  Date + "\n" +  
  If-Modified-Since + "\n"  
  If-Match + "\n"  
  If-None-Match + "\n"  
  If-Unmodified-Since + "\n"  
  Range + "\n"  
  CanonicalizedHeaders +   
  CanonicalizedResource;  

En el ejemplo siguiente se muestra una cadena de firma para una solicitud para enumerar los trabajos de una cuenta con un tiempo de espera de 20 segundos. Cuando no existe un valor de encabezado, solo se especifica el carácter de nueva línea.

GET\n\n\n\n\n\n\n\n\n\n\n\nocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n /myaccount/jobs\napi-version:2014-01-01.1.0\ntimeout:20  

Si se analiza esta cadena línea a línea, se puede ver cada parte de la misma:

  
GET\n /*HTTP Verb*/  
\n    /*Content-Encoding*/  
\n    /*Content-Language*/  
\n    /*Content-Length*/  
\n    /*Content-MD5*/  
\n    /*Content-Type*/  
\n    /*Date*/  
\n    /*If-Modified-Since */  
\n    /*If-Match */  
\n    /*If-None-Match */  
\n    /*If-Unmodified-Since*/  
\n    /* Range */  
ocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n    /*CanonicalizedHeaders*/  
/myaccount/jobs\napi-version:2014-04-01.1.0\ntimeout:20    /*CanonicalizedResource*/  

A continuación, codifique esta cadena mediante el algoritmo HMAC-SHA256 a través de la cadena de firma codificada UTF-8, construya el encabezado Authorization y agregue el encabezado a la solicitud. En el ejemplo siguiente se muestra el encabezado Authorization para la misma operación:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Construir la cadena de encabezados con formato canónico

Para construir a la parte CanonicalizedHeaders de la cadena de firma, siga estos pasos:

  1. Recupere todos los encabezados del recurso que comienzan por ocp-, incluido el encabezado ocp-date .

  2. Convierta cada nombre de encabezado HTTP a minúsculas.

  3. Ordene los encabezados lexicográficamente por nombres de encabezado, en orden ascendente. Cada encabezado puede aparecer una sola vez en la cadena.

  4. Reemplace los espacios en blanco importantes con un solo espacio.

  5. Recorte los espacios en blanco alrededor del carácter de dos puntos en el encabezado.

  6. Anexe un carácter de nueva línea a cada encabezado con formato canónico en la lista resultante. Construya la cadena CanonicalizedHeaders concatenando todos los encabezados de esta lista en una sola cadena.

Construir la cadena de recurso con formato canónico

La parte CanonicalizedResource de la cadena de firma representa el recurso del servicio del lote que la solicitud tiene como destino. Cualquier parte de la cadena CanonicalizedResource derivada del URI del recurso debe codificarse exactamente tal como está en el URI.

Aplique las reglas siguientes para construir la cadena de recurso con formato canónico:

  • Evite utilizar el carácter de nueva línea (\n) en los valores para los parámetros de consulta. Si es imprescindible hacerlo, asegúrese de que no afecte al formato de la cadena de recurso con formato canónico.

  • Evite el uso de comas en los valores de los parámetros de consulta.

Puede construir la cadena CanonicalizedResource de la siguiente manera:

  1. Comenzando por una barra diagonal ("/"), seguida del nombre de la cuenta que posee el recurso al que se está accediendo.

  2. Anexe la ruta de acceso URI codificada del recurso, sin ningún parámetro de consulta.

  3. Recupere todos los parámetros de consulta en el URI del recurso, incluido el parámetro api-version .

  4. Convierta todos los nombres de parámetro a minúsculas.

  5. Ordene los parámetros de consulta lexicográficamente por nombres de parámetro, en orden ascendente.

  6. Extraiga de la dirección URL el nombre y el valor de cada uno de los parámetros de consulta.

  7. Anexe el nombre y el valor de cada uno de los parámetros de consulta a la cadena con el formato siguiente, asegurándose de incluir los dos puntos (:) entre el nombre y el valor:

    parameter-name:parameter-value  
    
  8. Si un parámetro de consulta tiene más de un valor, ordene todos los valores lexicográficamente y, a continuación, inclúyalos en una lista separada por comas:

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n  
    
  9. Anexe un carácter de nueva línea (\n) después de cada par nombre-valor.

Codificar la firma

Para codificar la firma, llame al algoritmo HMAC-SHA256 en la cadena de firma codificada mediante UTF-8 y codifique el resultado como Base64. Utilice el formato siguiente (mostrado como pseudocódigo):

Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))  

Autenticación mediante Microsoft Entra ID

Azure Batch admite la autenticación con Microsoft Entra ID, el directorio basado en la nube multiinquilino de Microsoft y el servicio de administración de identidades. Azure usa Microsoft Entra ID para autenticar a sus propios clientes, administradores de servicios y usuarios de la organización.

Nota

La autenticación con Microsoft Entra ID es opcional, pero se recomienda, solo es necesaria si la cuenta de Batch está configurada para asignar grupos en una suscripción de usuario. La opción de asignación del grupo está disponible al crear una nueva cuenta de Batch. Si la cuenta está configurada para asignar grupos en una suscripción administrada por Batch, el uso de Microsoft Entra ID para la autenticación es opcional. Para obtener más información, consulte Batch : compatibilidad con redes virtuales y imágenes personalizadas para grupos de máquinas virtuales.

Para obtener información general sobre cómo autenticar una solicitud con Azure AD, consulte Referencia de la API REST de Azure. Para usar Azure AD con el servicio Batch, necesitará los siguientes puntos de conexión.

El punto de conexión de Azure AD "común" es:

https://login.microsoftonline.com/common

El punto de conexión del recurso para el servicio Batch es:

https://batch.core.windows.net/

Para más información sobre cómo registrar la aplicación de Batch con Microsoft Entra ID, consulte Autenticación de servicios de Azure Batch con Microsoft Entra ID.