2017-10-15 1 views
0

Ich benutze Swift, um einen API-Aufruf zu meinen Google Cloud Buckets zu machen.Google Cloud-Speicher - Anonyme Benutzer haben keinen storage.buckets.list Zugriff auf Projekt XXXXXXXXXX

import PlaygroundSupport 
import Foundation 

let url = URL(string: "https://www.googleapis.com/storage/v1/b?project=<project id>") 

let task = URLSession.shared.dataTask(with: url!) { data, response, error in 
    guard error == nil else { 
     print(error!) 
     return 
    } 
    guard let data = data else { 
     print("Data is empty") 
     return 
    } 

    let json = try! JSONSerialization.jsonObject(with: data, options: []) 
    print(json) 
} 

task.resume() 
PlaygroundPage.current.needsIndefiniteExecution = true 

leider ist es das, was bekam ist:

{ 
    error =  { 
     code = 401; 
     errors =   (
         { 
       domain = global; 
       location = Authorization; 
       locationType = header; 
       message = "Anonymous users does not have storage.buckets.list access to project <project id>."; 
       reason = required; 
      } 
     ); 
     message = "Anonymous users does not have storage.buckets.list access to project <project id>."; 
    }; 
} 

Google Cloud Dokumentation sehr verwirrend ist. Ich weiß nicht, wie man in diesem Fall den Benutzer angibt. Was ist der richtige Weg?

Antwort

0

Die Auflistung von Buckets erfordert, dass Ihre Anfrage als Benutzer- oder Dienstkonto mit storage.buckets.list permission genehmigt wird. Dies ist normalerweise ein Konto mit der Rolle "Owner", "Editor", "Viewer" oder "storage.admin" im Projekt.

Als erstes müssen Sie entscheiden, ob Sie als Benutzer oder Dienstkonto autorisieren möchten. Wählen Sie Benutzerberechtigung, wenn diese schnelle Anwendung auf Projekte eines Endbenutzers zugreifen soll. Wählen Sie Dienstkontoauth, wenn Sie Buckets im eigenen Projekt Ihrer Anwendung auflisten müssen.

Wenn Sie Dienstkonto wählen, müssen Sie ein Sevice Konto erstellen und generieren Anmeldeinformationen für die es (siehe here) und verwenden Sie dann, dass in Ihrer App eine JWT zu generieren, die Sie in einem Autorisierungsheader während Ihres API-Aufruf übergeben (siehe here).

Wenn Sie sich im Namen Ihrer Endbenutzer authentifizieren möchten, muss Ihre Anwendung den "OAuth 2.0 Three Legged Flow" ausführen, bei dem Ihre App Ihren Nutzer mit einer Anfrage für ein Token an Google sendet. Google gibt dem Nutzer dann einen Authentifizierungsdialog und die Wahl, um Zugang zu Ihrer Anwendung zu gewähren, und wenn sie ja sagen, leitet sie sie mit einem Aktualisierungstoken zurück. Ihre App kann dann das Aktualisierungstoken zusammen mit API-Aufrufen verwenden (oder besser, verwendet das Aktualisierungstoken, um ein kurzlebiges Zugriffstoken zum Senden zu erhalten). Wie Sie dies tun, hängt von der Art der Anwendung ab, siehe here für Details.

Verwandte Themen