web-dev-qa-db-fra.com

Erreur de non-concordance des autorisations de stockage Azure Blob pour obtenir une demande avec le jeton AD

Je construis une application Angular 6 qui pourra faire fonctionner CRUD sur Azure Blob Storage. J'utilise cependant postman pour tester les requêtes avant de les implémenter dans l'application et copier-coller le jeton que je reçois de Angular pour cette ressource.

Lorsque j'essaie de lire un fichier que j'ai à l'intérieur du stockage à des fins de test, j'obtiens: <Code>AuthorizationPermissionMismatch</Code> <Message>This request is not authorized to perform this operation using this permission.

  • Tout en environnement de production (bien qu'en développement)
  • Jeton acquis spécifiquement pour la ressource de stockage via Oauth
  • Postman a la stratégie de jeton comme "porteur"
  • L'application a des autorisations déléguées "Azure Storage" accordées.
  • L'application et le compte sur lesquels j'acquiers le jeton sont ajoutés en tant que "propriétaires" dans le contrôle d'accès Azure IAM
  • Mon IP est ajoutée aux paramètres CORS sur le stockage d'objets blob.
  • StorageV2 (usage général v2) - Standard - Chaud
  • l'en-tête x-ms-version utilisé est: 2018-03-28 car c'est la dernière que j'ai pu trouver et je viens de créer le compte de stockage.
6
MichaelB

J'ai trouvé qu'il ne suffisait pas que l'application et le compte soient ajoutés en tant que propriétaires, j'irais dans votre compte de stockage> IAM> Ajouter un rôle et ajouter la permission spéciale pour ce type de demande, STORAGE BLOB DATA CONTRIBUTOR (PREVIEW)

10
jager1000

Sachez que si vous souhaitez appliquer le rôle "STORAGE BLOB DATA XXXX" à la portée de l'abonnement, cela ne fonctionnera pas si votre abonnement possède des espaces de noms Azure DataBricks:

Si votre abonnement comprend un espace de noms Azure DataBricks, les rôles attribués à la portée de l'abonnement ne pourront pas accorder l'accès aux données d'objets blob et de file d'attente.

Source: https://docs.Microsoft.com/en-us/Azure/storage/common/storage-auth-aad-rbac-portal#determine-resource-scope

1
sylr

Je viens de résoudre ce problème en modifiant la ressource demandée dans la méthode GetAccessTokenAsync de " https://storage.Azure.com " à l'URL de mon blob de stockage comme dans cet extrait:

    public async Task<StorageCredentials> CreateStorageCredentialsAsync()
    {
        var provider = new AzureServiceTokenProvider();
        var token = await provider.GetAccessTokenAsync(AzureStorageContainerUrl);
        var tokenCredential = new TokenCredential(token);
        var storageCredentials = new StorageCredentials(tokenCredential);
        return storageCredentials;
    }

où AzureStorageContainerUrl est défini sur https://xxxxxxxxx.blob.core.windows.net/

0
Liam