azure coldfusion azure-storage-blobs

Autenticación de Microsoft Azure Falló y ColdFusion



azure-storage-blobs (1)

Quería compartir mi último programa de trabajo en ColdFusion 2016:

<!--- Copied directly from portal.azure for this storage account. The copied value is in base64 format. ---> <cfset theKey = "fxIciOymaQ2OAcc1g2M...BwQRxNPtEzmwHAyx6J6pw==" /> <!--- Explicitly decode the base64 key into binary, so that hmac() does not use the supplied "encoding", ie utf-8 to decode it (because that produces the wrong result). ---> <cfset binaryKey = binaryDecode(theKey, "base64")> <cfset requestMethod = "GET" /> <cfset utcDate = dateConvert("local2UTC",now()) /> <cfset xmsDate = dateFormat(utcDate,"ddd, dd mmm yyyy") & " " & timeFormat(utcDate,"HH:mm:ss") & " GMT" /> <cfset xmsVersion = "2015-12-11" /> <cfset canonicalizedHeaders = "x-ms-date:#xmsDate#/nx-ms-version:#xmsVersion#/n" /> <cfset canonicalizedResource = "/coldfusion/slao/ncomp:list/ninclude:metadata,snapshots,uncommittedblobs/nrestype:container" /> <cfset stringToSign = "#requestMethod#/n/n/n/n/n/n/n/n/n/n/n/n#canonicalizedHeaders##canonicalizedResource#" /> <cfset x = replace(stringToSign,"/n","#chr(10)#","all") /> <cfset y = hmac(x,binaryKey,"HmacSHA256","utf-8") /> <cfset requestSignature = toBase64(binaryDecode(y,"hex")) /> <cfhttp method="#requestMethod#" url="https://coldfusion.blob.core.windows.net/slao?restype=container&comp=list&include=snapshots&include=metadata&include=uncommittedblobs" result="requestResult"> <cfhttpparam type="header" name="Authorization" value="SharedKey coldfusion:#requestSignature#"> <cfhttpparam type="header" name="x-ms-date" value="#xmsDate#"> <cfhttpparam type="header" name="x-ms-version" value="#xmsVersion#"> </cfhttp> <cfdump var="#requestResult#" expand="yes" />

¡Muchas gracias! Sharon

Estoy trabajando para conectar una aplicación ColdFusion 2016 al almacenamiento de blobs de Microsoft Azure y simplemente no parece que pueda obtener la autenticación correcta.

Aquí está el error que estoy recibiendo:

<Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:9aed89ad-0001-00b8-6fd8-ecc48c000000 Time:2016-08-02T16:07:42.9046123Z</Message><AuthenticationErrorDetail>The Date header in the request is incorrect.</AuthenticationErrorDetail></Error>

El servidor HTTP / 1.1 403 no pudo autenticar la solicitud. Asegúrese de que el valor del encabezado de autorización esté formado correctamente, incluida la firma. Content-Length: 419 Content-Type: application / xml Servidor: Microsoft-HTTPAPI / 2.0 x-ms-request-id: 9aed89ad-0001-00b8-6fd8-ecc48c000000 Fecha: mar, 02 de agosto de 2016 16:07:42 Conexión GMT : cerca

Aquí está mi código para listar blobs en un contenedor:

<!--- The key is copied directly from the Azure portal interface. ---> <cfset theKey = "fxIciOymaQ2OAcc1g2M...BwQRxNPtEzmwHAyx6J6pw==" /> <cfset requestMethod = "GET" /> <cfset utcDate = dateConvert("local2UTC",now()) /> <cfset xmsDate = dateFormat(utcDate,"ddd, d mmm yyyy") & " " & timeFormat(utcDate,"HH:mm:ss") & " GMT" /> <cfset xmsVersion = "2015-12-11" /> <cfset canonicalizedHeaders = "x-ms-date:#xmsDate#/nx-ms-version:#xmsVersion#/n" /> <cfset canonicalizedResource = "/coldfusion/slao/ncomp:list/ninclude:metadata,snapshots,uncommittedblobs/nrestype:container/n" /> <cfset stringToSign = "#requestMethod#/n/n/n/n/n/n/n/n/n/n/n/n#canonicalizedHeaders##canonicalizedResource#" /> <cfset x = replace(stringToSign,"/n","#chr(13)##chr(10)#","all") /> <cfset y = hmac(x,tmp,"HmacSHA256","utf-8") /> <cfset requestSignature = toBase64(binaryDecode(y,"hex")) /> <cfhttp method="#requestMethod#" url="https://coldfusion.blob.core.windows.net/slao?restype=container&comp=list&include=snapshots&include=metadata&include=uncommittedblobs" result="requestResult"> <cfhttpparam type="header" name="Authorization" value="SharedKey coldfusion:#requestSignature#"> <cfhttpparam type="header" name="x-ms-date" value="#xmsDate#"> <cfhttpparam type="header" name="x-ms-version" value="#xmsVersion#"> </cfhttp>

El error sugiere una mala fecha. Como prueba, he copiado el sello de fecha y hora que se muestra en la respuesta de error y volví a ejecutar mi programa, el mismo error. He pasado bastante tiempo tratando de investigar esto por mi cuenta, pero no he progresado en esto. También probé Fiddler pero, por supuesto, estoy obteniendo el mismo error.

¿Alguien ve cuál podría ser el problema? Cualquier idea sería apreciada...

Sharon