2017-09-18 6 views
0

何らかの理由で、「署名が一致しません」というエラーを受け取らずに、自分のトークンの内容の処理を設定できないようです。 私のAzure SASトークンでコンテンツ処理が機能しないのはなぜですか?

は、以下のコードを参照してください。 $rscd変数作品私は空の文字列として設定しますが、私は「ファイル;添付」として設定したときに動作しない場合は、 as mentioned in the docs.

任意のアイデア?

$start = (new \DateTime())->setTimezone(new \DateTimeZone('GMT'))->modify('-1 minutes');  
$end = (new \DateTime())->setTimezone(new \DateTimeZone('GMT'))->modify('+10 minutes'); 
$start = $start->format('Y-m-d\TH:i:s\Z'); 
$end = $end->format('Y-m-d\TH:i:s\Z'); 
$rscd = "file; attachment"; 
//$rscd = ""; 

$spr = (getenv('APP_ENV') == 'production') ? "https" : "http,https"; 

$toSign = $storageAccount . "\n"; 
$toSign .= "rwdlac" . "\n"; 
$toSign .= "b" . "\n"; 
$toSign .= "sco" . "\n"; 
$toSign .= $start . "\n"; 
$toSign .= $end . "\n"; 
$toSign .= $rscd . "\n"; 
$toSign .= $spr . "\n"; 
$toSign .= "2017-04-17" . "\n"; 

$signature = rawurlencode(base64_encode(hash_hmac('sha256', $toSign, base64_decode($sasKeyValue), TRUE))); 
$token = "?sv=2017-04-17&ss=b&srt=sco&sp=rwdlac&se=" . $end . "&st=" . $start . "&rscd=" . $rscd . "&spr=" . $spr . "&sig=" . $signature; 

return $token; 
+0

をあなたは 'サービスを混合していますSAS」と「Account SAS」を使用しています。このリンクを使用してService SASを作成してください:https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas –

答えて

0

@Gauralvでは、次の形式でサービスSASを作成する必要があり、指摘されたように:

StringToSign = signedpermissions + "\n" + 
       signedstart + "\n" + 
       signedexpiry + "\n" + 
       canonicalizedresource + "\n" + 
       signedidentifier + "\n" + 
       signedIP + "\n" + 
       signedProtocol + "\n" + 
       signedversion + "\n" + 
       rscc + "\n" + 
       rscd + "\n" + 
       rsce + "\n" + 
       rscl + "\n" + 
       rsct 

そして、以下のようにコードを変更してください:

$start = (new \DateTime())->setTimezone(new \DateTimeZone('GMT'))->modify('-1 minutes');  
$end = (new \DateTime())->setTimezone(new \DateTimeZone('GMT'))->modify('+10 minutes'); 
$start = $start->format('Y-m-d\TH:i:s\Z'); 
$end = $end->format('Y-m-d\TH:i:s\Z'); 
$rscd = "file; attachment"; 


$toSign = "rwdl" . "\n"; 
$toSign .= $start . "\n"; 
$toSign .= $end . "\n"; 
$toSign .= "/blob" ."/".$accountName . "/" . $container . "/" . $blob . "\n"; 
$toSign .= "\n"; 
$toSign .= "\n"; 
$toSign .= "\n"; 
$toSign .= "2017-04-17" . "\n"; 
$toSign .= "\n"; 
$toSign .= $rscd . "\n"; 
$toSign .= "\n"; 
$toSign .= "\n"; 

$signature = rawurlencode(base64_encode(hash_hmac('sha256', $toSign, base64_decode($sasKeyValue), TRUE))); 
$token = "?st=" . $start . "&se=" . $end . "&sr=b&sp=rwdl&sv=2017-04-17&rscd=" . $rscd . "&sig=" . $signature; 

return $token; 
関連する問題