Editar

Share via


Proteger os tokens de atualização On-Behalf-Of do OAuth 2.0 para serviços Web

Azure CLIs
Azure DevOps
Azure Functions
Azure Key Vault
Azure Pipelines

Ao desenvolver serviços Web, talvez seja necessário obter tokens usando o fluxo OAuth 2.0 On-Behalf-Of (OBO). O fluxo OBO serve para o caso de uso em que um aplicativo invoca um serviço ou API da Web, que por sua vez precisa chamar outro serviço ou API da Web. O OBO propaga a identidade e as permissões do usuário delegado através da cadeia de solicitações. Quando um aplicativo precisa usar tokens de acesso e atualização indefinidamente, geralmente em cenários de acesso offline, é fundamental armazenar os tokens de atualização com segurança.

Aviso

Considere cuidadosamente o risco e a responsabilidade envolvidos no armazenamento de quaisquer tokens de segurança, uma vez que esses tokens podem dar a um ator mal-intencionado acesso a recursos protegidos pela ID Microsoft Entra da organização. Uma violação de segurança de um aplicativo que tem como alvo Contas em qualquer diretório organizacional (Qualquer diretório Microsoft Entra - Multilocatário) pode ser especialmente desastrosa.

O armazenamento de tokens de acesso representa um maior risco de segurança, uma vez que um token de acesso por si só pode acessar recursos. A abordagem recomendada não é armazenar tokens de acesso, mas obter os tokens de acesso conforme necessário. Armazene com segurança apenas os tokens de atualização, com tanto rigor como se fossem tokens de acesso.

Se necessário, você pode revogar tokens de atualização se eles ficarem comprometidos.

Potenciais casos de utilização

Esta solução usa o Azure Key Vault, o Azure Functions e o Azure DevOps para atualizar e armazenar tokens de atualização OBO com segurança.

Arquitetura

Diagrama mostrando os processos de atualização de chave e token.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de dados

  • O Azure Key Vault contém chaves de criptografia secretas para cada locatário do Microsoft Entra ID .
  • Uma função acionada por temporizador do Azure Functions obtém a chave secreta mais recente do Cofre de Chaves. Outra função do Azure Functions recupera o token de atualização da plataforma de identidade da Microsoft e o salva com a versão de chave secreta mais recente.
  • Um banco de dados armazena a chave criptografada mais recente e dados opacos.
  • Um pipeline de entrega contínua do Azure DevOps gerencia e sincroniza os processos secretos de rotação e atualização de token.

O Azure Pipelines é um local conveniente para adicionar sua estratégia de rotação de chaves, se você já estiver usando Pipelines para infraestrutura como código (IaC) ou integração e entrega contínua (CI/CD). Você não precisa usar o Azure Pipelines, desde que limite os caminhos para definir e recuperar segredos.

Aplique a política a seguir para permitir que a Entidade de Serviço para sua conexão de serviço do Azure DevOps defina segredos no Cofre da Chave. Substitua as <Key Vault Name> variáveis e <Service Connection Principal> pelos valores corretos para seu ambiente.

az keyvault set-policy --name $<Key Vault Name> --spn $<Service Connection Principal> --secret-permissions set

Depois de configurar o Azure Pipelines para criar e atualizar chaves, você pode agendar o pipeline para ser executado periodicamente. O pipeline atualiza o segredo do Cofre da Chave para sincronizar com a rotação da chave e salva o token criptografado com a nova versão secreta. Para obter mais informações, consulte Configurar agendas para pipelines.

Identidade gerida

A maneira preferida de um serviço do Azure como o Azure Functions acessar o Cofre da Chave é usar a identidade gerenciada do serviço. Você pode conceder acesso por meio do portal do Azure, CLI do Azure ou por meio de um modelo do Azure Resource Manager (ARM) para cenários de IAC.

Portal do Azure

No portal do Azure, adicione uma política de acesso ao Cofre da Chave para permitir que a ID do Objeto de identidade gerenciada do Azure Functions obtenha e defina segredos. Para obter mais informações, consulte Adicionar uma identidade atribuída pelo sistema e Usar referências do Cofre da Chave para o Serviço de Aplicativo e o Azure Functions.

Captura de ecrã a mostrar como ativar a identidade gerida no portal do Azure.

CLI do Azure

Você também pode definir a política do Azure Key Vault usando a CLI do Azure:

az keyvault set-policy --name $<Key Vault Name> --spn $<Service Connection Principal> --secret-permissions set
az keyvault set-policy --name $<Key Vault Name> --spn $<Managed Identity Principal> --secret-permissions get

Modelo ARM

O modelo ARM a seguir dá ao Azure Functions acesso ao Azure Key Vault. Substitua as *** variáveis pelos valores corretos para seu ambiente.

{
  "type": "Microsoft.KeyVault/vaults",
  "apiVersion": "2019-09-01",
  "name": "***",
  "location": "***",
  "properties": {
    "sku": {
      "family": "A",
      "name": "standard"
    },
    "tenantId": "***",
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForTemplateDeployment": false,
    "enabledForDiskEncryption": false,
    "accessPolicies": [
      {
        "tenantId": "***",
        "objectId": "<Managed Identity Principal>",
        "permissions": {
          "secrets": [
            "get"
          ]
        }
      },
      {
        "tenantId": "***",
        "objectId": "<Service Connection Principal>",
        "permissions": {
          "secrets": [
            "set"
          ]
        }
      }
    ]
  }
}

Armazenamento de tokens

Você pode usar qualquer banco de dados para armazenar os tokens em formato criptografado. O diagrama a seguir mostra a sequência para armazenar tokens de atualização em um banco de dados:

Diagrama que mostra a sequência de token de adição.

A sequência tem duas funções, userId() e secretId(). Você pode definir essas funções como uma combinação de token.oid, token.tide token.sub. Para obter mais informações, consulte Usando o id_token.

Com a chave criptográfica armazenada como um segredo, pode procurar a versão mais recente da chave no Cofre de Chaves do Azure.

Uso de token

Usar a chave é simples. A sequência a seguir consulta a chave com base na versão de chave mais recente.

Diagrama que mostra a sequência de uso do token armazenado.

A atualização de token é ortogonal para a função, portanto, o DoWork Azure Functions pode executar DoWork e atualizar o token de forma assíncrona usando Funções Duráveis. Para obter mais informações sobre funções acionadas por HTTP com funções duráveis, consulte Recursos HTTP.

Não é recomendável usar o Cofre da Chave do Azure no pipeline de solicitações HTTP, portanto, armazene as respostas em cache sempre que razoável. No exemplo, a resposta do Cofre da Chave à getSecret(secretId, secretVersion) chamada é armazenável em cache.

Rotação de chaves e atualização de token

Você pode girar a chave secreta ao mesmo tempo em que atualiza o token de atualização, para que o token mais recente seja criptografado com a versão mais recente do segredo de criptografia. Esse processo usa o suporte interno do Azure Functions para gatilhos de timer. Para obter mais informações, consulte Gatilho de temporizador para o Azure Functions.

O diagrama de sequência a seguir ilustra o processo de sincronização da atualização do token com a rotação da chave:

Diagrama que mostra a sequência de sincronização da atualização do token com a rotação da chave.

Controlo de utilizadores e acessos

A plataforma de identidade da Microsoft oferece a capacidade de revogar tokens de atualização em caso de comprometimento. Consulte Revogação de token e Revoke-AzureADUserAllRefreshToken.

Nota

Os módulos Azure AD e MSOnline PowerShell foram preteridos a partir de 30 de março de 2024. Para saber mais, leia a atualização de descontinuação. Após essa data, o suporte para esses módulos é limitado à assistência de migração para o SDK do Microsoft Graph PowerShell e correções de segurança. Os módulos preteridos continuarão a funcionar até 30 de março de 2025.

Recomendamos migrar para o Microsoft Graph PowerShell para interagir com o Microsoft Entra ID (anteriormente Azure AD). Para perguntas comuns sobre migração, consulte as Perguntas frequentes sobre migração. Nota: As versões 1.0.x do MSOnline podem sofrer interrupções após 30 de junho de 2024.

Para remover um usuário do Microsoft Entra ID, basta remover o registro do usuário. Para remover o acesso ao aplicativo por usuário, remova a refreshToken parte dos dados do usuário.

Para remover o acesso de um grupo de usuários, como todos os usuários em um locatário de destino, você pode usar o Azure Pipelines para excluir o segredo do grupo com base em secretId().

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Autor principal:

Próximos passos