2016-08-02 14 views
6

私はColdFusion 2016アプリケーションをMicrosoft Azure blob storageに接続しようとしていますが、正しい認証を得ることができないようです。ここでMicrosoft Azure認証に失敗しました。&ColdFusion

は、私が受けてるのエラーです:

<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>

HTTP/1.1 403サーバーは、要求の認証に失敗しました。承認ヘッダーの 値が、 署名を含めて正しく構成されていることを確認してください。 Content-Length:419 Content-Type:application/xmlサーバー: Microsoft-HTTPAPI/2.0 x-ms-request-id: 9aed89ad-0001-00b8-6fd8-ecc48c000000日付:Tue、02 8月2016 16:07:42 GMT接続:

近いここでは、コンテナ内のブロブを一覧表示するために私のコードです:

<!--- 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> 

エラーが悪い日付を示唆しています。テストとして、エラー応答に表示された日付と時刻のスタンプをコピーして、プログラムを再実行しました - 同じエラーです。私は自分でこれを研究しようとかなりの時間を費やしてきましたが、これについてはまだ進んでいません。私もFiddlerを試してみましたが、もちろん、同じエラーが発生しています。

問題が何であるか誰にも見えますか?任意のアイデアをいただければ幸いです...

シャロン

+0

(編集)replace()は問題の一部です。通常、HTTP要求*のみ*は新しい行に 'chr(10)'を使います。したがって、APIが特にあなたに 'chr(13)'と 'chr(10)'(CR&LF)の両方を使用するよう指示しない限り、それは問題を引き起こす可能性があります。 'chr(10)'だけを使ってみてください。 – Leigh

+0

ここで 'tmp'変数をどのように計算していますか?'? –

+0

@Leigh、まず、エラーメッセージのフォーマットを修正していただきありがとうございます!また、#chr(13)#を削除しても、同じエラーが発生しています。 – SharonG

答えて

5

私は、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" /> 

多くの感謝! シャロン

関連する問題