Ich versuche, eine Anfrage gegen die Azure-Speicher-API an ein Konto zu richten, das nicht öffentlich sichtbar ist und Anforderungen benötigt, um authentifiziert zu werden.Verwenden von Azure Blob-Speicher-REST-API mit https
Ich habe versucht, diese Seite für die Header zu folgen: https://msdn.microsoft.com/en-us/library/azure/dd179428.aspx
Ich kann einfach nicht diese Arbeit machen. Ich erhalte immer einen "ResourceNotFound" -Fehler, den ich nicht erklären kann, da ich auf keinen Fall das Speicherkonto oder die Containernamen falsch beschreibe. Ich bin auch erfolgreich mit Power BI verbunden, indem ich denselben Account, denselben Container und denselben Schlüssel verwende.
Das einzige, was ich denken kann, könnte mit der Generierung der Signatur sein, könnte ich in den Codierungen verloren gehen (das erste Mal mache ich so etwas) .. Das erklärt jedoch nicht die Fehlermeldung "Ressource nicht gefunden". Hier ist der Code für die Anfrage (R):
#azure storage endpoint to hit against
account <- "myaccount"
container <- "mycontainer"
requestProperties <- "comp=list"
endPoint <- paste("https://", account, ".blob.core.windows.net/", sep = "")
endPoint
#[1] "https://myaccount.blob.core.windows.net/"
#date header
timeStamp <- Sys.time()
timeString <- format(timeStamp, format="%y-%m-%d %H:%M:%S", tz="GMT", usetz = TRUE)
timeString <- "Fri, 30 Sep 2016 14:54:30 GMT"
dateHeader <- paste("x-ms-date", timeString, sep = ":")
dateHeader
#[1] "x-ms-date:Fri, 30 Sep 2016 14:54:30 GMT"
#version header
versionHeader <- "x-ms-version:2015-02-21"
#authorization header
requestVerb <- "GET"
authType <- "SharedKey"
azureKey <- "myAccountKey"
newLines <- "\n\n\n\n\n\n\n\n\n\n"
canonicalizedHeaders <- paste(dateHeader,versionHeader, sep = "\n")
#build canonicalized resource
resourceAccount <- paste("/",account, sep = "")
resourceContainer <- paste ("/",container, sep = "")
resource <- paste(resourceAccount, resourceContainer, sep = " ")
canonicalizedResource <- paste(resource, requestProperties, sep = "\n")
canonicalizedResource
#[1] "/myaccount /mycontainer\ncomp=list"
#build authentication signed string
stringToSign <- paste(requestVerb, newLines, canonicalizedHeaders, canonicalizedResource, sep = "\n")
stringToSign <- enc2utf8(stringToSign)
stringToSign
#[1] "GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 30 Sep 2016 14:54:30 GMT\nx-ms-version:2015-02-21\n/myaccount /mycontainer\ncomp=list"
Signature <- digest::hmac(object = stringToSign, key = azureKey, algo = "sha256", serialize = FALSE)
#authentication header
authorization <- paste(account, Signature, sep = ":")
authorization
#[1] "myaccount:b4761595ea09d0e9d56223bd0a14233bca2b9fc3bb043031586215942f5c6d06"
authHeader <- paste("Authorization:", authType, authorization, sep = " ")
authHeader
#[1] "Authorization: SharedKey myaccount:b4761595ea09d0e9d56223bd0a14233bca2b9fc3bb043031586215942f5c6d06"
#build the actual request
request <- paste(endPoint, requestProperties, sep = "?")
request
#[1] "https://myaccount.blob.core.windows.net/?comp=list"
azureRequest <- httr::GET(request, httr::add_headers(dateHeader, versionHeader, authHeader))
responseContent <- httr::content(azureRequest, as = "text")
responseContent
#[1] "<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>ResourceNotFound</Code><Message>The specified resource does not exist.\nRequestId:b1e87500-0001-0003-6231-1b7598000000\nTime:2016-09-30T15:44:52.3452448Z</Message></Error>"
Fehle ich etwas beim Generieren der Anfrage? Muss ich etwas mit meinem Konto tun, um den Zugriff über die REST-API zu ermöglichen?
So stellt MS kein Dummy-Konto mit öffentlich verfügbaren Authentifizierungsschlüsseln zu Demonstrationszwecken zur Verfügung? Andernfalls sollten Sie nur in ein Azure-spezifisches Forum gehen, da der Rest der US-Azure-Benutzer keine Antworten testen kann. –
Ich hoffe, das ist nicht Ihre echte SharedKey – Paparazzi
Versuchen Sie, den Container in den Pfad zu setzen. z.B. http: // .blob.core.windows.net/mycontainer –
Paparazzi