Adquirir um token da Azure AD para autorizar pedidos de um pedido de cliente

Uma vantagem fundamental da utilização de Azure Ative Directory (Azure AD) com o armazenamento de Azure Blob ou armazenamento de fila é que as suas credenciais já não precisam de ser armazenadas no seu código. Em vez disso, pode solicitar um token de acesso OAuth 2.0 a partir do plataforma de identidades da Microsoft. A Azure AD autentica o principal de segurança (um utilizador, grupo ou principal de serviço) que executa a aplicação. Se a autenticação for bem sucedida, a Azure AD devolve o sinal de acesso à aplicação, e a aplicação pode então utilizar o token de acesso para autorizar pedidos para armazenamento de Azure Blob ou armazenamento de fila.

Este artigo mostra como configurar a sua aplicação nativa ou aplicação web para autenticação com o plataforma de identidades da Microsoft usando uma aplicação de amostra que está disponível para download. A aplicação da amostra apresenta .NET, mas outras línguas usam uma abordagem semelhante. Para mais informações sobre o plataforma de identidades da Microsoft, consulte plataforma de identidades da Microsoft visão geral.

Para obter uma visão geral do fluxo de concessão de código OAuth 2.0, consulte o acesso autorizado a aplicações web Azure Ative Directory utilizando o fluxo de concessão de código OAuth 2.0.

Sobre a aplicação da amostra

A aplicação da amostra proporciona uma experiência de ponta a ponta que mostra como configurar uma aplicação web para autenticação com Azure AD em um ambiente de desenvolvimento local. Para visualizar e executar a aplicação da amostra, primeiro clone ou descarregue-o a partir de GitHub. Em seguida, siga os passos descritos no artigo para configurar um registo de aplicações Azure e atualizar a aplicação para o seu ambiente.

Atribuir um papel a um diretor de segurança da AD Azure

Para autenticar um principal de segurança a partir da sua aplicação Azure Armazenamento, configurar primeiro as definições de controlo de acesso baseado em funções (Azure RBAC) para esse principal de segurança. A Azure Armazenamento define funções incorporadas que englobam permissões para contentores e filas. Quando o papel de Azure é atribuído a um diretor de segurança, esse diretor de segurança tem acesso a esse recurso. Para obter mais informações, consulte Atribuir uma função Azure para acesso aos dados blob.

Registe o seu pedido junto de um inquilino da AD Azure

O primeiro passo para a utilização da Azure AD para autorizar o acesso aos recursos de armazenamento é registar a sua aplicação de cliente com um inquilino AZure AD do portal Azure. Quando regista a sua candidatura ao cliente, fornece informações sobre o pedido à Azure AD. A Azure AD fornece então um ID do cliente (também chamado de ID de aplicação) que utiliza para associar a sua aplicação à Azure AD no tempo de execução. Para saber mais sobre o ID do cliente, consulte os objetos principais de aplicação e serviço em Azure Ative Directory. Para registar a sua aplicação Azure Armazenamento, siga os passos indicados no Quickstart: Registe uma aplicação com o plataforma de identidades da Microsoft.

A imagem a seguir mostra configurações comuns para registar uma aplicação web. Note-se que, neste exemplo, o URI de redirecionamento está definido para http://localhost:5000/signin-oidc testar a aplicação da amostra no ambiente de desenvolvimento. Pode modificar esta definição mais tarde na definição de Autenticação para a sua aplicação registada no portal Azure:

Screenshot mostrando como registar a sua aplicação de armazenamento com Azure AD

Nota

Se registar a sua candidatura como uma aplicação nativa, pode especificar qualquer URI válido para o URI de redirecionamento. Para aplicações nativas, este valor não tem de ser um URL real. Para aplicações web, o URI de redirecionamento deve ser um URI válido, pois especifica o URL para o qual são fornecidos tokens.

Depois de ter registado a sua candidatura, verá o ID da aplicação (ou ID do cliente) em Definições:

Screenshot mostrando o ID do cliente

Para obter mais informações sobre o registo de uma candidatura com a Azure AD, consulte integrar aplicações com Azure Ative Directory.

Conceda as permissões da sua aplicação registada à Azure Armazenamento

Em seguida, conceda as permissões de seu pedido para ligar para Azure Armazenamento APIs. Este passo permite que o seu pedido autorize pedidos à Azure Armazenamento com a Azure AD.

  1. Na página de permissões da API para a sua aplicação registada, selecione Adicionar uma permissão.

  2. No separador APIs da Microsoft, selecione Azure Armazenamento.

  3. A pedido a API permissões de painéis, em que tipo de permissões a sua aplicação requer? Esta opção é selecionada por padrão.

  4. Em Permissões, selecione a caixa de verificação ao lado user_impersonation, em seguida, selecione o botão 'Adicionar permissões'.

    Screenshot mostrando permissões para armazenamento API

  5. Em seguida, conceda o consentimento administrativo para estas permissões clicando no consentimento de administração grant para o Diretório Predefinido.

O painel de permissões da API mostra agora que a sua aplicação AD Azure registada tem acesso tanto à Microsoft Graph como à Azure Armazenamento APIs, e esse consentimento é concedido para o diretório padrão. As permissões são concedidas automaticamente à Microsoft Graph quando regista a sua aplicação pela primeira vez com a Azure AD.

Screenshot mostrando permissões de API para aplicação registada

Criar um segredo de cliente

O pedido precisa de um segredo de cliente para provar a sua identidade ao pedir um token. Por razões de segurança, a Microsoft limita a criação de segredos de clientes por mais de 24 meses e recomenda vivamente que o coloque num valor inferior a 12 meses. Para adicionar o segredo do cliente, siga estes passos:

  1. Navegue para o registo da sua aplicação no portal Azure.

  2. Selecione a definição de segredos & certificados.

  3. Sob os segredos do Cliente, clique em Novo segredo de cliente para criar um novo segredo.

  4. Forneça uma descrição para o segredo e escolha o intervalo de validade pretendido.

  5. Copie imediatamente o valor do novo segredo para um local seguro. O valor total é apresentado apenas uma vez.

    Screenshot mostrando o segredo do cliente

Permitir o fluxo de subvenção implícita

Em seguida, configurar o fluxo de subvenção implícita para a sua aplicação. Siga estes passos:

  1. Navegue para o registo da sua aplicação no portal Azure.

  2. Na secção Gerir, selecione a definição de Autenticação.

  3. Na secção de concessão implícita, selecione a caixa de verificação para permitir fichas de ID, como mostra a seguinte imagem:

    Screenshot mostrando como ativar configurações para fluxo de subvenção implícito

Bibliotecas de clientes para aquisição simbólica

Uma vez registado o seu pedido e concedido permissões de acesso a dados no armazenamento de Azure Blob ou no armazenamento da fila, pode adicionar código à sua aplicação para autenticar um principal de segurança e adquirir um token OAuth 2.0. Para autenticar e adquirir o token, pode utilizar uma das bibliotecas de autenticação plataforma de identidades da Microsoft ou outra biblioteca de código aberto que suporte o OpenID Ligação 1.0. A sua aplicação pode então utilizar o token de acesso para autorizar um pedido contra o armazenamento da Azure Blob ou o armazenamento da fila.

Para obter uma lista de cenários para os quais a aquisição de fichas é suportada, consulte a secção de fluxos de autenticação da documentação da Biblioteca de Autenticação da Microsoft (MSAL).

Valores bem conhecidos para autenticação com Azure AD

Para autenticar um principal de segurança com Azure AD, tem de incluir alguns valores bem conhecidos no seu código.

Autoridade AD de Azure

Para a nuvem pública da Microsoft, a base Azure AD authority é a seguinte, onde o id do inquilino é o seu ID do inquilino ative (ou iD do diretório):

https://login.microsoftonline.com/<tenant-id>/

A identificação do inquilino identifica o inquilino da Ad Azure para usar para autenticação. É também referido como o ID do diretório. Para recuperar o ID do inquilino, navegue na página Geral para o registo da sua aplicação no portal Azure e copie o valor daí a partir daí.

ID de recursos Azure Armazenamento

Um ID de recurso Azure indica o público para o qual um símbolo emitido pode ser usado para fornecer acesso a um recurso Azure. No caso do Azure Storage, o ID de recurso pode ser específico de uma única conta de armazenamento, ou pode aplicar-se a qualquer conta de armazenamento. A tabela a seguir descreve os valores que pode fornecer para o ID de recursos:

ID do Recurso Description
https://<account>.blob.core.windows.net

https://<account>.queue.core.windows.net
O ponto final de serviço para uma determinada conta de armazenamento. Utilize este valor para adquirir um símbolo para autorizar pedidos a essa conta e serviço específicos do Azure Storage. Substitua o valor nos parênteses pelo nome da sua conta de armazenamento.
https://storage.azure.com/ Utilize para adquirir um símbolo para autorizar pedidos a qualquer conta de Armazenamento Azure.

.NET código exemplo: Criar uma bolha de bloco

O exemplo de código mostra como obter um token de acesso a partir de Azure AD. O token de acesso é utilizado para autenticar o utilizador especificado e, em seguida, autorizar um pedido para criar uma bolha de bloco. Para pôr esta amostra a funcionar, siga primeiro os passos descritos nas secções anteriores.

Para solicitar o token, necessitará dos seguintes valores a partir do registo da sua aplicação:

  • O nome do seu domínio Azure AD. Recupere este valor na página geral do seu Azure Ative Directory.
  • O iD do inquilino (ou diretório). Recupere este valor a partir da página geral do registo da sua aplicação.
  • O ID do cliente (ou aplicação). Recupere este valor a partir da página geral do registo da sua aplicação.
  • O URI de redirecionamento de clientes. Recupere este valor das definições de Autenticação para o registo da sua aplicação.
  • O valor do segredo do cliente. Recupere este valor a partir do local para o qual o copiou anteriormente.

Criar uma conta de armazenamento e um recipiente

Para executar a amostra de código, crie uma conta de armazenamento dentro da mesma subscrição que o seu Azure Ative Directory. Em seguida, crie um recipiente dentro dessa conta de armazenamento. O código de amostra criará uma bolha de bloco neste recipiente.

Em seguida, atribua explicitamente a função Armazenamento Contribuinte de Dados Blob para a conta de utilizador sob a qual irá executar o código de amostra. Para aprender a atribuir este papel no portal Azure, consulte atribuir uma função Azure para acesso aos dados blob.

Nota

Quando cria uma conta Azure Armazenamento, não lhe são atribuídas automaticamente permissões de acesso aos dados através do Azure AD. Deve atribuir-se explicitamente um papel de Azure para o Azure Armazenamento. Pode atribuí-lo ao nível da sua subscrição, grupo de recursos, conta de armazenamento ou contentor ou fila.

Antes de atribuir uma função para o acesso aos dados, poderá aceder aos dados na sua conta de armazenamento através do portal Azure, uma vez que o portal Azure também pode utilizar a chave de conta para o acesso aos dados. Para mais informações, consulte Escolha como autorizar o acesso aos dados blob no portal Azure.

Crie uma aplicação web que autorize o acesso ao armazenamento blob com Azure AD

Quando a sua aplicação acede ao Azure Armazenamento, fá-lo em nome do utilizador, o que significa que os recursos blob ou de fila são acedidos usando as permissões do utilizador que está iniciado. Para experimentar este exemplo de código, precisa de uma aplicação web que indique ao utilizador que insinue-se utilizando uma identidade AD AZure. Pode criar a sua própria, ou utilizar a aplicação de amostra fornecida pela Microsoft.

Uma aplicação web de amostra concluída que adquire um token e a usa para criar uma bolha em Azure Armazenamento está disponível no GitHub. Rever e executar a amostra completa pode ser útil para entender os exemplos de código. Para obter instruções sobre como executar a amostra completa, consulte a secção intitulada Ver e executar a amostra completa.

Adicionar referências e usar declarações

A partir de Visual Studio, instale a biblioteca de clientes Azure Armazenamento. No menu Ferramentas, selecione Gestor de Pacotes NuGet e, em seguida, Consola do Gestor de Pacotes. Digite os seguintes comandos na janela da consola para instalar os pacotes necessários a partir da biblioteca cliente Azure Armazenamento para .NET:

Install-Package Azure.Storage.Blobs
Install-Package Microsoft.Identity.Web -Version 0.4.0-preview

Em seguida, adicione as seguintes declarações ao ficheiro HomeController.cs:

using Microsoft.Identity.Web; //MSAL library for getting the access token
using Azure.Storage.Blobs;

Criar uma bolha de bloco

Adicione o seguinte corte de código para criar uma bolha de bloco. Lembre-se de substituir valores em suportes angulares por seus próprios valores:

private static async Task<string> CreateBlob(TokenAcquisitionTokenCredential tokenCredential)
{
    Uri blobUri = new Uri("https://<storage-account>.blob.core.windows.net/<container>/Blob1.txt");
    BlobClient blobClient = new BlobClient(blobUri, tokenCredential);

    string blobContents = "Blob created by Azure AD authenticated user.";
    byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

    using (MemoryStream stream = new MemoryStream(byteArray))
    {
        await blobClient.UploadAsync(stream);
    }
    return "Blob successfully created";
}

Nota

Para autorizar operações de bolhas e filas com um token OAuth 2.0, tem de utilizar HTTPS.

No exemplo acima, a biblioteca de clientes .NET trata da autorização do pedido de criação do bloco blob. O Azure Armazenamento bibliotecas de clientes para outras línguas também tratam da autorização do pedido para si. No entanto, se você está chamando uma operação Azure Armazenamento com um token OAuth usando a API REST, então você precisará construir o cabeçalho de autorização usando o token OAuth.

Para ligar para as operações de serviço Blob e Queue utilizando fichas de acesso OAuth, passe o token de acesso no cabeçalho de autorização utilizando o esquema Bearer, e especifique uma versão de serviço de 2017-11-09 ou superior, como mostra o seguinte exemplo:

GET /container/file.txt HTTP/1.1
Host: mystorageaccount.blob.core.windows.net
x-ms-version: 2017-11-09
Authorization: Bearer eyJ0eXAiOnJKV1...Xd6j

Obter um token de acesso do Azure AD

Em seguida, adicione um método que solicita um token da Azure AD em nome do utilizador. Este método define o âmbito para o qual devem ser concedidas permissões. Para obter mais informações sobre permissões e âmbitos, consulte permissões e consentimento no plataforma de identidades da Microsoft ponto final.

Utilize o ID do recurso para construir o âmbito para a aquisição do token. O exemplo constrói o âmbito utilizando o ID do recurso juntamente com o âmbito incorporado, o user_impersonation que indica que o token está a ser solicitado em nome do utilizador.

Tenha em mente que poderá ter de apresentar ao utilizador uma interface que permita ao utilizador consentir em solicitar o sinal em seu nome:

[AuthorizeForScopes(Scopes = new string[] { "https://storage.azure.com/user_impersonation" })]
public async Task<IActionResult> Blob()
{
    string message = await CreateBlob(new TokenAcquisitionTokenCredential(_tokenAcquisition));
    ViewData["Message"] = message;
    return View();
}

Consentimento é o processo de um utilizador que concede autorização a um pedido de acesso a recursos protegidos em seu nome. O plataforma de identidades da Microsoft suporta o consentimento incremental, o que significa que um principal de segurança pode solicitar um conjunto mínimo de permissões inicialmente e adicionar permissões ao longo do tempo, conforme necessário. Quando o seu código solicitar um token de acesso, especifique o âmbito das permissões de que a sua aplicação necessita. Para obter mais informações sobre o consentimento incremental, consulte o consentimento incremental e dinâmico.

Ver e executar a amostra completa

Para executar a aplicação da amostra, primeiro clone ou descarregue-o a partir de GitHub. Em seguida, atualize a aplicação como descrito nas seguintes secções.

Fornecer valores no ficheiro de definições

Atualize a appsettings.jsficheiro com os seus próprios valores, da seguinte forma:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "<azure-ad-domain-name>.onmicrosoft.com",
    "TenantId": "<tenant-id>",
    "ClientId": "<client-id>",
    "ClientSecret": "<client-secret>",
    "ClientCertificates": [
    ],
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Atualizar a conta de armazenamento e o nome do recipiente

No ficheiro HomeController.cs, atualize o URI que faz referência à bolha de bloco para utilizar o nome da sua conta de armazenamento e do seu contentor, substituindo os valores em suportes angulares pelos seus próprios valores:

https://<storage-account>.blob.core.windows.net/<container>/Blob1.txt

Passos seguintes