Autorizar solicitações para recursos do Serviço Azure SignalR com identidades gerenciadas do Microsoft Entra

O Serviço Azure SignalR dá suporte à ID do Microsoft Entra para autorizar solicitações de identidades gerenciadas do Microsoft Entra.

Este artigo mostra como configurar o recurso e o código do Serviço Azure SignalR para autorizar solicitações ao recurso a partir de uma identidade gerenciada.

Configurar identidades geridas

A primeira etapa é configurar identidades gerenciadas.

Este exemplo mostra como configurar uma identidade gerenciada atribuída ao sistema em um Serviço de Aplicativo usando o portal do Azure:

  1. Aceda às definições da sua aplicação no portal do Azure no grupo Definições no painel de navegação esquerdo.

  2. Selecione a Identidade.

  3. Na guia Sistema atribuído, alterne Status para Ativado. Clique em Guardar.

    Captura de ecrã que mostra onde mudar o Estado para Ativado e, em seguida, selecione Guardar.

Para saber mais sobre como configurar identidades gerenciadas de outras maneiras para o Serviço de Aplicativo do Azure e o Azure Functions, consulte Como usar identidades gerenciadas para o Serviço de Aplicativo e o Azure Functions.

Para saber mais sobre como configurar identidades gerenciadas em uma VM do Azure, consulte Configurar identidades gerenciadas em máquinas virtuais (VMs) do Azure

Adicionar atribuições de função no portal do Azure

As etapas a seguir descrevem como atribuir uma função de Servidor de Aplicativo SignalR a uma identidade atribuída pelo sistema em um recurso do Serviço Azure SignalR. Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

Nota

Uma função pode ser atribuída a qualquer escopo, incluindo grupo de gerenciamento, assinatura, grupo de recursos ou recurso único. Para saber mais sobre o escopo, consulte Entender o escopo do Azure RBAC.

  1. No portal do Azure, vá para o recurso do Serviço Azure SignalR.

  2. Selecione Controlo de acesso (IAM) .

  3. Selecione Adicionar>Adicionar atribuição de função.

    Captura de tela que mostra a página para controle de acesso e seleções para adicionar uma atribuição de função.

  4. Na guia Função, selecione SignalR App Server.

  5. No separador Membros, selecione Identidade gerida e, em seguida, selecione Selecionar membros.

  6. Selecione a subscrição do Azure.

  7. Selecione Identidade gerenciada atribuída ao sistema, procure uma máquina virtual à qual você deseja atribuir a função e selecione-a.

  8. No separador Rever + atribuir, selecione Rever + atribuir para atribuir a função.

Importante

As atribuições de função do Azure podem levar até 30 minutos para se propagar.

Para saber mais sobre como atribuir e gerenciar funções do Azure, consulte estes artigos:

Configurar seu aplicativo

Servidor de aplicações

Usar uma identidade atribuída ao sistema

O SDK do Azure SignalR dá suporte à cadeia de conexão baseada em identidade. Se a configuração estiver definida nas variáveis de ambiente do App Server, você não precisará reimplantar o App Server, mas simplesmente uma alteração de configuração para migrar da Chave de Acesso para o MSI. Por exemplo, atualize a variável Azure__SignalR__ConnectionString de ambiente do App Server para Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;. Ou definido em código DI.

services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;");

Além disso, você pode usar DefaultAzureCredential ou ManagedIdentityCredential para configurar seus pontos de extremidade do Serviço Azure SignalR. A melhor prática é usar ManagedIdentityCredential diretamente.

Observe que a identidade gerenciada atribuída ao sistema é usada por padrão, mas certifique-se de não configurar nenhuma variável de ambiente que EnvironmentCredential preservou se você usar DefaultAzureCredential. Caso contrário, o Serviço Azure SignalR voltará a ser usado EnvironmentCredential para fazer a solicitação, o que geralmente resulta em uma Unauthorized resposta.

Importante

Remova Azure__SignalR__ConnectionString se houve variáveis de ambiente desta forma. Azure__SignalR__ConnectionString será usado para criar padrão ServiceEndpoint com a primeira prioridade e pode levar seu Servidor de Aplicativo a usar a Chave de Acesso inesperadamente.

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
    };
});

Usar uma identidade atribuída pelo usuário

Fornecer ClientId ao criar o ManagedIdentityCredential objeto.

Importante

Use o ID do cliente, não o ID do objeto (principal), mesmo que ambos sejam GUIDs.

Use a cadeia de conexão baseada em identidade.

services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;ClientId=<your-user-identity-client-id>;Version=1.0;");

Ou construa ServiceEndpoint com ManagedIdentityCredential.

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        var clientId = "<your-user-identity-client-id>";
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
    };
});

Associações do Serviço Azure SignalR no Azure Functions

As associações do Serviço Azure SignalR no Azure Functions usam as configurações do aplicativo no portal ou local.settings.json localmente para configurar uma identidade gerenciada para acessar seus recursos do Serviço Azure SignalR.

Você pode precisar de um grupo de pares chave/valor para configurar uma identidade. As chaves de todos os pares chave/valor devem começar com um prefixo de nome de conexão (que assume AzureSignalRConnectionStringcomo padrão ) e um separador. O separador é um sublinhado (__) no portal e dois pontos (:) localmente. Você pode personalizar o prefixo usando a propriedade ConnectionStringSettingbinding .

Usar uma identidade atribuída ao sistema

Se você configurar apenas o URI de serviço, usará a DefaultAzureCredential classe. Essa classe é útil quando você deseja compartilhar a mesma configuração no Azure e em ambientes de desenvolvimento local. Para saber como funciona, consulte DefaultAzureCredential.

No portal do Azure, use o exemplo a seguir para configurar DefaultAzureCredentialo . Se você não configurar nenhuma dessas variáveis de ambiente, a identidade atribuída ao sistema será usada para autenticação.

<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net

Aqui está um exemplo de configuração no arquivo local.settings.json DefaultAzureCredential . No escopo local, não há identidade gerenciada. A autenticação por meio do Visual Studio, da CLI do Azure e das contas do Azure PowerShell é tentada em ordem.

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net"
  }
}

Se você quiser usar uma identidade atribuída ao sistema de forma independente e sem a influência de outras variáveis de ambiente, defina a credential chave com o prefixo do nome da conexão como managedidentity. Aqui está um exemplo de configurações do aplicativo:

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity

Usar uma identidade atribuída pelo usuário

Se você quiser usar uma identidade atribuída pelo usuário, precisará atribuir clientId além serviceUri de e credential chaves com o prefixo do nome da conexão. Aqui está um exemplo de configurações do aplicativo:

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>

Próximos passos

Veja os seguintes artigos relacionados: