2017-10-15 17 views
0

J'utilise swift pour effectuer un appel API dans mes compartiments google cloud.Stockage sur le cloud Google - Les utilisateurs anonymes n'ont pas l'accès storage.buckets.list au projet 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 

malheureusement, voici ce qui est obtenu:

{ 
    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>."; 
    }; 
} 

documentation nuage Google est très déroutant. Je ne sais pas comment spécifier l'utilisateur dans ce cas. Quelle est la bonne façon?

Répondre

0

Les listes d'annonces nécessitent que votre demande soit autorisée en tant qu'utilisateur ou compte de service avec storage.buckets.list permssion. Il s'agit généralement d'un compte avec le rôle "Owner", "Editor", "Viewer" ou "storage.admin" sur le projet.

La première chose à décider est de savoir si vous souhaitez autoriser un utilisateur ou un compte de service. Choisissez Autorisation utilisateur si cette application rapide doit accéder à des projets appartenant à un utilisateur final. Choisissez l'authentification du compte de service si vous avez besoin de lister des compartiments dans le propre projet de votre application.

Si vous choisissez compte de service, vous devez créer un compte sevice et générer des informations pour (voir here) et utiliser ensuite que, dans votre application pour générer un JWT que vous passez dans un en-tête d'autorisation lors de votre appel API (voir here). Si vous choisissez de vous authentifier au nom de vos utilisateurs finaux, votre application doit exécuter le "OAuth 2.0 flux à trois branches" lorsque votre application envoie votre utilisateur à Google avec une demande de jeton, Google puis donne à l'utilisateur une boîte de dialogue d'authentification et le choix d'accorder l'accès à votre application, et s'ils disent oui les redirige avec un jeton d'actualisation. Votre application peut ensuite utiliser le jeton d'actualisation avec les appels d'API (ou mieux, utilise le jeton d'actualisation pour obtenir un jeton d'accès de courte durée à envoyer). La façon dont vous faites cela dépend du type d'application, voir here pour plus de détails.