Aplicativos na execução fora do Azure (por exemplo, no local ou em um data center de terceiros) devem usar um principal de serviço de aplicativo para autenticar-se no Azure ao acessar recursos do Azure. Crie objetos da entidade de serviço do aplicativo por meio do processo de registro do aplicativo no Azure. Ao criar um principal de serviço de aplicativo, você obtém um ID de cliente e um segredo de cliente para seu aplicativo. Armazene a ID do cliente, o segredo do cliente e sua ID de locatário em variáveis de ambiente para que o SDK do Azure para JavaScript use essas variáveis para autenticar seu aplicativo no Azure em runtime.
Crie um registro de aplicativo diferente para cada ambiente (como teste, estágio, produção) em que o aplicativo é executado. Essa configuração permite configurar permissões de recurso específicas do ambiente para cada entidade de serviço e garante que um aplicativo implantado em um ambiente não acesse os recursos do Azure em outro ambiente.
1 – Registrar o aplicativo no Azure
Você pode registrar um aplicativo no Azure usando o portal do Azure ou a CLI do Azure.
Entre no portal do Azure e siga estas etapas.
| Instructions |
Screenshot |
No portal do Azure:
- Insira registros de aplicativos na caixa de pesquisa na parte superior do portal do Azure.
- Selecione o item rotulado Registros de aplicativo sob o título Serviços no menu que aparece abaixo da barra de pesquisa.
|
|
| Na página Registros de aplicativo, selecione + Novo registro. |
|
Na página Registrar um aplicativo, preencha o formulário conforme segue.
- Nome → Insira um nome para o registro de aplicativo no Azure. Recomendamos que esse nome inclua o nome do aplicativo e o ambiente (teste, prod) referente ao registro do aplicativo.
- Tipos de conta compatíveis → Contas somente neste diretório organizacional.
Selecione Registrar para registrar seu aplicativo e criar a entidade de serviço de aplicativo. |
|
Na página Registro de aplicativo do seu aplicativo:
- ID do aplicativo (cliente) → Essa é a ID do aplicativo que seu aplicativo usará para acessar o Azure durante o desenvolvimento local. Copie esse valor para um local temporário em um editor de texto, pois você precisará dele em uma etapa futura.
- ID de diretório (locatário) → Esse valor também será necessário para seu aplicativo quando ele for autenticado no Azure. Copie esse valor para um local temporário em um editor de texto, pois ele será necessário em uma etapa futura.
- Credenciais do cliente → Você deve definir as credenciais do cliente para o aplicativo antes que seu aplicativo possa se autenticar no Azure e usar os serviços do Azure. Selecione Adicionar um certificado ou segredo para adicionar credenciais ao seu aplicativo.
|
|
| Na página de segredos de Certificados &, selecione + Novo segredo do cliente. |
|
A caixa de diálogo Adicionar um segredo de cliente será exibida do lado direito da página. Nesta caixa de diálogo:
- Descrição → Inserir um valor de Atual.
- Expira → Selecione um valor de 24 meses.
Selecione Adicionar para adicionar o segredo.
IMPORTANTE: defina um lembrete em seu calendário antes da data de validade do segredo. Dessa forma, você pode adicionar um novo segredo antes e atualizar seus aplicativos antes da expiração desse segredo e evitar uma interrupção de serviço em seu aplicativo. |
|
A página Certificados e segredos mostra o valor do segredo do cliente.
Copie esse valor para um local temporário em um editor de texto, pois você precisará dele em uma etapa futura.
IMPORTANTE: esta é a única vez que você verá esse valor. Depois de sair ou atualizar esta página, você não poderá ver esse valor novamente. Você pode adicionar outro segredo de cliente sem invalidar o segredo anterior, mas não verá esse valor novamente. |
|
az ad sp create-for-rbac --name <app-name>
A saída do comando é semelhante ao exemplo a seguir. Anote esses valores ou mantenha essa janela aberta porque você precisa desses valores na próxima etapa e não pode exibir o valor da senha (segredo do cliente) novamente.
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-sdk-auth-prod",
"password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2",
"tenant": "ffffaaaa-5555-bbbb-6666-cccc7777dddd"
}
2 – Atribuir funções à entidade de serviço de aplicativo
Em seguida, determine quais funções (permissões) seu aplicativo precisa em quais recursos e atribua essas funções ao seu aplicativo. Atribua funções no escopo do recurso, do grupo de recursos ou da assinatura. Este exemplo mostra como atribuir funções para a entidade de serviço no escopo do grupo de recursos, uma vez que a maioria dos aplicativos agrupa todos os seus recursos do Azure em um único grupo de recursos.
| Instructions |
Screenshot |
Localize o grupo de recursos do aplicativo pesquisando pelo nome do grupo de recursos e usando a caixa de pesquisa na parte superior do portal do Azure.
Navegue até o grupo de recursos selecionando o nome do grupo de recursos no título Grupos de recursos na caixa de diálogo. |
|
| Na página do grupo de recursos, selecione Controle de acesso (IAM) no menu à esquerda. |
|
Na página Controle de acesso (IAM):
- Selecione a guia Atribuições de função.
- Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu suspenso resultante.
|
|
A página Adicionar atribuição de função lista todas as funções que podem ser atribuídas ao grupo de recursos.
- Use a caixa de pesquisa para filtrar a lista para obter um tamanho mais gerenciável. Este exemplo mostra como filtrar as funções do Blob de Armazenamento.
- Selecione a função que você deseja atribuir.
Selecione Avançar para ir para a próxima tela.
|
|
A próxima página Adicionar atribuição de função permite especificar a qual usuário atribuir a função.
- Selecione Usuário, grupo ou entidade de serviço em Atribuir acesso a.
- Selecionar + Selecionar membros em Membros
Uma caixa de diálogo é aberta no lado direito do portal do Azure. |
|
Na caixa de diálogo Selecionar membros:
- A caixa de texto Selecionar pode ser usada para filtrar a lista de usuários e grupos em sua assinatura. Se necessário, digite os primeiros caracteres da entidade de serviço que você criou para o aplicativo para filtrar a lista.
- Selecione a entidade de serviço associada ao aplicativo.
Para continuar, selecione Selecionar na parte inferior da caixa de diálogo. |
|
A entidade de serviço aparece como selecionada na tela Adicionar atribuição de função.
Selecione Revisar + atribuir para ir para a página final e, em seguida, Revisar + atribuir novamente para concluir o processo. |
|
Atribua uma função a uma entidade de serviço no Azure com o comando az role assignment create.
az role assignment create --assignee "{appId}" \
--role "{roleName}" \
--scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
Para obter os nomes de funções que você pode atribuir a um principal de serviço, utilize o comando az role definition list.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Por exemplo, para dar à entidade de serviço acesso de leitura, gravação e exclusão aos contêineres de blob do Armazenamento do Azure e aos dados de todas as contas de armazenamento no grupo de recursos msdocs-sdk-auth-example, atribua a entidade de serviço de aplicativo para a função Colaborador de dados de blob de armazenamento com o comando a seguir.
az role assignment create --assignee "aaaaaaaa-bbbb-cccc-7777-888888888888" \
--role "Storage Blob Data Contributor" \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-javascript-sdk-auth-example \
Para obter informações sobre como atribuir permissões no nível de recurso ou assinatura usando a CLI do Azure, consulte Atribuir funções do Azure usando a CLI do Azure.
Defina as AZURE_CLIENT_IDvariáveis , AZURE_TENANT_IDe AZURE_CLIENT_SECRET de ambiente para o processo que executa seu aplicativo JavaScript. Você precisa disponibilizar as credenciais da entidade do serviço de aplicativos para o seu aplicativo em tempo de execução. O objeto DefaultAzureCredential procura as informações principais do serviço nessas variáveis de ambiente.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
4 – Implementar DefaultAzureCredential no aplicativo
Para autenticar objetos cliente do SDK do Azure para o Azure, use a classe DefaultAzureCredential do pacote @azure/identity.
Primeiro, adicione o pacote @azure/identity ao seu aplicativo.
npm install @azure/identity
Em seguida, para qualquer código JavaScript que crie um objeto cliente do SDK do Azure em seu aplicativo, execute as seguintes etapas:
- Importar a classe
DefaultAzureCredential do módulo @azure/identity.
- Crie um objeto
DefaultAzureCredential.
- Passar o objeto
DefaultAzureCredential para o construtor do objeto do cliente do SDK do Azure.
Um exemplo desse código é mostrado no segmento de código a seguir.
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
Quando o código acima instanciar o objeto DefaultAzureCredential, o DefaultAzureCredential lê as variáveis de ambiente AZURE_SUBSCRIPTION_ID, AZURE_TENANT_ID, AZURE_CLIENT_ID e AZURE_CLIENT_SECRET para obter as informações da entidade de serviço de aplicativo com as quais deve se conectar ao Azure.