Tutorial: Construa um daemon multi-inquilino que usa a plataforma de identidade da Microsoft

Neste tutorial, você descarrega e execute uma aplicação web ASP.NET daemon que demonstra usar a bolsa de credenciais de cliente OAuth 2.0 para obter um token de acesso para ligar para a Microsoft Graph API.

Neste tutorial:

  • Integrar uma app daemon com a plataforma de identidade da Microsoft
  • Conceder permissões de pedido diretamente à app por um administrador
  • Obtenha um token de acesso para ligar para a Microsoft Graph API
  • Ligue para a Microsoft Graph API.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

Scenario

A aplicação foi construída como uma aplicação ASP.NET MVC. Utiliza o middleware OWIN OpenID Connect para iniciar síssição nos utilizadores.

O componente "daemon" desta amostra é um controlador API, SyncController.cs. Quando o controlador é chamado, ele puxa uma lista de utilizadores no inquilino Azure Ative Directory (Azure AD) do cliente do Microsoft Graph. SyncController.cs é desencadeada por uma chamada AJAX na aplicação web. Utiliza a Microsoft Authentication Library (MSAL) para .NET adquirir um token de acesso para o Microsoft Graph.

Uma vez que a aplicação é uma aplicação multi-inquilina para clientes empresariais da Microsoft, deve fornecer uma forma de os clientes se "inscreverem" ou "ligarem" a aplicação aos dados da empresa. Durante o fluxo de ligação, um Administrador Global concede primeiro permissões de aplicação diretamente à app para que possa aceder aos dados da empresa de forma não interativa, sem a presença de um utilizador inscrito. A maior parte da lógica desta amostra mostra como alcançar este fluxo de conexão utilizando o ponto final de consentimento da plataforma de identidade.

Diagram shows UserSync App with three local items connecting to Azure, with Start dot Auth acquiring a token interactively to connect to Azure A D, AccountController getting admin consent to connect to Azure A D, and SyncController reading user to connect to Microsoft Graph.

Para obter mais informações sobre os conceitos utilizados nesta amostra, leia a documentação do protocolo de credenciais do cliente para a plataforma de identidade.

Clone ou descarregue este repositório

A partir da sua concha ou linha de comando, insira este comando:

git clone https://github.com/Azure-Samples/active-directory-dotnet-daemon-v2.git

Ou descarregue a amostra num ficheiro zip.

Registar a aplicação

Esta amostra tem um projeto. Para registar o pedido com o seu inquilino AD Azure, você pode:

Se quiser utilizar a automatização:

  1. No Windows, gere o PowerShell e vai para a raiz do diretório clonado.

  2. Execute este comando:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  3. Execute o script para criar a sua aplicação AD Azure e configuure o código da aplicação da amostra em conformidade:

    .\AppCreationScripts\Configure.ps1
    

    Outras formas de executar scripts são descritas em scripts de criação de aplicativos.

  4. Abra a solução Visual Studio e selecione Comece a executar o código.

Se não quiser utilizar a automatização, utilize os passos nas seguintes secções.

Escolha o inquilino AZure AD

  1. Inicie sessão no portal do Azure.
  2. Se tiver acesso a vários inquilinos, utilize o filtro Diretório + subscrições no menu superior para mudar para o inquilino no qual pretende registar a inscrição.

Registar a aplicação do cliente (dotnet-web-daemon-v2)

  1. Procure e selecione Azure Active Directory.

  2. Em Gestão, selecione registos de aplicações>Novo registo.

  3. Introduza um Nome para a sua aplicação, por exemplo dotnet-web-daemon-v2. Os utilizadores da sua aplicação podem ver este nome, e pode alterá-lo mais tarde.

  4. Na secção de tipos de conta suportado , selecione Contas em qualquer diretório organizacional.

  5. Na secção URI de redirecionamento (opcional), selecione Web na caixa de combinação e introduza https://localhost:44316/ e https://localhost:44316/Account/GrantPermissions como URIs de redirecionamento.

    Se existirem mais de dois URIs de redirecionamento, terá de adicioná-los mais tarde no separador Autenticação , depois de a aplicação ter sido criada com sucesso.

  6. Selecione Registar para criar a aplicação.

  7. Na página geral da aplicação, encontre o valor de ID da Aplicação (cliente) e grave-o para utilização posterior. Você precisará dele para configurar o ficheiro de configuração do Estúdio Visual para este projeto.

  8. Em Gestão, selecione Autenticação.

  9. Desa estação URL de logotipo do canal frontal para https://localhost:44316/Account/EndSession.

  10. Na secção de fluxos implícitos e híbridos , selecione tokens de acesso e fichas de identificação. Esta amostra requer que o fluxo de subvenção implícito seja habilitado a assinar no utilizador e a chamar uma API.

  11. Selecione Guardar.

  12. Em Gestão, selecione segredos & de certificados.

  13. Na secção de segredos do Cliente , selecione Novo segredo de cliente.

  14. Introduza uma descrição chave (por exemplo, segredo de aplicação).

  15. Selecione uma duração chave de 1 ano, em 2 anos ou nunca expire.

  16. Selecione Adicionar. Grave o valor da chave num local seguro. Mais tarde, vai precisar desta chave para configurar o projeto no Visual Studio.

  17. Em Gestão, selecione permissões> APIAdicione uma permissão.

  18. Na secção APIs da Microsoft, selecione Microsoft Graph.

  19. Na secção de permissões da Aplicação , certifique-se de que as permissões certas são selecionadas: User.Read.All.

  20. Selecione Permissões adicionar.

Configure a amostra para usar o seu inquilino AZure AD

Nos passos seguintes, o ClientID é o mesmo que "ID de aplicação" ou AppId.

Abra a solução no Estúdio Visual para configurar os projetos.

Configure o projeto do cliente

Se utilizar os scripts de configuração, terão sido aplicadas as seguintes alterações para si.

  1. Abra o ficheiro UserSync\Web.Config .
  2. Encontre a chave da aplicação ida:ClientId. Substitua o valor existente pelo ID de aplicação da aplicação dotnet-web-daemon-v2 copiada do portal Azure.
  3. Encontre a chave da aplicação ida:ClientSecret. Substitua o valor existente pela chave que guardou durante a criação da aplicação dotnet-web-daemon-v2 no portal Azure.

Executar o exemplo

Limpe a solução, reconstrua a solução, execute a aplicação UserSync e, em seguida, inscreva-se como administrador no seu inquilino AZure AD. Se você não tem um inquilino AZure AD para testes, você pode seguir estas instruções para obter um.

Quando iniciar sessão, a aplicação pede-lhe primeiro permissão para o iniciar e ler o seu perfil de utilizador. Este consentimento permite que a aplicação garanta que é um utilizador de negócios.

User consent

A aplicação tenta então sincronizar uma lista de utilizadores do seu inquilino AZure AD, através do Microsoft Graph. Se não puder, pede-lhe (o administrador do inquilino) que ligue o seu inquilino à app.

A aplicação pede então permissão para ler a lista de utilizadores no seu inquilino.

Admin consent

Depois de conceder permissão, é assinado fora da aplicação. Esta sing-out garante que quaisquer fichas de acesso existentes para o Microsoft Graph sejam removidas da cache simbólica. Quando iniciar seduper novamente, o token fresco que é obtido terá as permissões necessárias para fazer chamadas para o Microsoft Graph.

Quando conceder a permissão, a aplicação pode então consultar os utilizadores em qualquer ponto. Pode verificar isto selecionando o botão Sync Users e refrescando a lista de utilizadores. Tente adicionar ou remover um utilizador e ressívar a lista. (Mas note que a aplicação sincroniza apenas a primeira página dos utilizadores.)

Sobre o código

O código relevante para esta amostra encontra-se nos seguintes ficheiros:

  • App_Start\Startup.Auth.cs, Controllers\AccountController.cs: Início de sposição. Em particular, as ações no controlador têm um atributo Autorizado , o que obriga o utilizador a iniciar sôms. O pedido utiliza o fluxo de código de autorização para assinar no utilizador.
  • Controladores\SyncController.cs: Sincronizar a lista de utilizadores para a loja de memória local.
  • Controladores\UserController.cs: Exibindo a lista de utilizadores da loja de memória local.
  • Controladores\AccountController.cs: Aquisição de permissões ao administrador do arrendatário utilizando o ponto final de consentimento administrativo.

Re-criar a aplicação de amostra

  1. No Visual Studio, crie um novo projeto Visual C#ASP.NET Web Application (.NET Framework ).
  2. No ecrã seguinte, escolha o modelo de projeto MVC . Adicione também as referências de pasta e núcleo para a API Web, porque adicionará um controlador API web mais tarde. Deixe o modo de autenticação escolhido do projeto como padrão: Sem Autenticação.
  3. Selecione o projeto na janela 'Solução Explorer ' e selecione a tecla F4 .
  4. Nas propriedades do projeto, definir SSL Enabled to True. Note a informação em URL SSL. Vai precisar dele ao configurar o registo desta candidatura no portal Azure.
  5. Adicione os seguintes pacotes nuGet de middleware OWIN ASP.NET:
    • Microsoft.Owin.Security.ActiveDirectory
    • Microsoft.Owin.Security.Cookies
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.IdentityModel.Protocol.Extensions
    • Microsoft.Owin.Security.OpenIdConnect
    • Microsoft.Identity.Client
  6. Na pasta App_Start :
    1. Crie uma classe chamada Startup.Auth.cs.
    2. Remover . App_Start do nome do espaço.
    3. Substitua o código da classe Startup pelo código do mesmo ficheiro da aplicação da amostra. Certifique-se de tomar toda a definição de classe. A definição muda de classe pública Startup para classe parcial pública Startup.
  7. No Startup.Auth.cs, resolva referências em falta adicionando declarações como sugerido pelo Visual Studio IntelliSense.
  8. Clique com o botão direito no projeto, selecione Add e, em seguida, selecione Class.
  9. Na caixa de pesquisa, insira OWIN. A classe OWIN Startup aparece como uma seleção. Selecione-o e nomeie a classe Startup.cs.
  10. No Startup.cs, substitua o código para a classe Startup pelo código do mesmo ficheiro da aplicação da amostra. Mais uma vez, note que a definição muda de classe pública Startup para classe parcial pública Startup.
  11. Na pasta Modelos , adicione uma nova classe chamada MsGraphUser.cs. Substitua a implementação pelo conteúdo do ficheiro com o mesmo nome da amostra.
  12. Adicione um novo Controlador MVC 5 - Instância vazia chamada Controlador de Conta. Substitua a implementação pelo conteúdo do ficheiro com o mesmo nome da amostra.
  13. Adicione um novo controlador MVC 5 - Instância vazia chamada UserController. Substitua a implementação pelo conteúdo do ficheiro com o mesmo nome da amostra.
  14. Adicione um novo controlador Web API 2 - Instância vazia chamada SyncController. Substitua a implementação pelo conteúdo do ficheiro com o mesmo nome da amostra.
  15. Para a interface do utilizador, na pasta Views\Account , adicione três visualizações vazias (sem modelo) casos chamados GrantPermissions, Index e UserMismatch. Adicione e um índice nomeado na pasta Views\User . Substitua a implementação pelo conteúdo do ficheiro com o mesmo nome da amostra.
  16. Atualize Shared_Layout.cshtml e Home\Index.cshtml para ligar corretamente as várias vistas.

Desloque a amostra para Azure

Este projeto tem aplicativos web e projetos web API. Para os deslocar para os websites da Azure, tome os seguintes passos para cada um:

  1. Crie um website Azure.
  2. Publique a aplicação web e as APIs web no site.
  3. Atualize os clientes para ligar para o site em vez do IIS Express.

Criar e publicar dotnet-web-daemon-v2 para um site da Azure

  1. Inicie sessão no portal do Azure.
  2. Selecione Criar um recurso no canto superior esquerdo.
  3. Selecione Web>Web App e, em seguida, dê um nome ao seu site. Por exemplo, diga-lhe dotnet-web-daemon-v2-contoso.azurewebsites.net.
  4. Selecione as informações para subscrição, grupo de recursos e plano de serviço de aplicação e localização. Os é Windows, e publicar é código.
  5. Selecione Criar e esperar que o serviço de aplicações seja criado.
  6. Quando receber a notificação conseguida da Implementação , selecione Ir para o recurso para ir ao serviço de aplicações recém-criado.
  7. Depois de o site ser criado, encontre-o no Dashboard e selecione-o para abrir o ecrã geral do serviço de aplicações.
  8. A partir do separador Visão Geral do serviço de aplicações, descarregue o perfil de publicação selecionando o link de perfil de publicação Get e guarde-o. Pode utilizar outros mecanismos de implantação, tais como a implantação a partir do controlo de origem.
  9. Mude para Visual Studio e depois:
    1. Vá ao projeto dotnet-web-daemon-v2 .
    2. Clique com o botão direito no projeto no Solution Explorer e, em seguida, selecione Publicar.
    3. Selecione Import Profile na barra inferior e importe o perfil de publicação que descarregou anteriormente.
  10. Selecione Configurar.
  11. No separador 'Ligação ', atualize o URL de destino para que utilize "https". Por exemplo, usar https://dotnet-web-daemon-v2-contoso.azurewebsites.net. Selecione Seguinte.
  12. No separador Definições , certifique-se de que ativar a autenticação organizacional .
  13. Selecione Guardar. Selecione Publicar no ecrã principal.

O Visual Studio publicará o projeto e abrirá automaticamente um navegador para o URL do projeto. Se vir a página web padrão do projeto, a publicação foi bem sucedida.

Atualizar o registo de pedido de inquilino Azure AD para dotnet-web-daemon-v2

  1. Volta para o portal Azure.
  2. No painel esquerdo, selecione o serviço Azure Ative Directory e, em seguida, selecione as inscrições da App.
  3. Selecione a aplicação dotnet-web-daemon-v2 .
  4. Na página autenticação para a sua aplicação, atualize os campos URL de logotipo do canal frontal com o endereço do seu serviço. Por exemplo, usar https://dotnet-web-daemon-v2-contoso.azurewebsites.net/Account/EndSession.
  5. A partir do menu De Branding , atualize o URL da página inicial para o endereço do seu serviço. Por exemplo, usar https://dotnet-web-daemon-v2-contoso.azurewebsites.net.
  6. Guarde a configuração.
  7. Adicione o mesmo URL na lista de valores do menuURIs de redirecionamento deautenticação>. Se tiver urLs de redirecionamento múltiplo, certifique-se de que há uma nova entrada que usa o URI do serviço de aplicações para cada URL de redirecionamento.

Limpar os recursos

Quando já não for necessário, elimine o objeto da aplicação que criou no Passo de Inscrição da sua aplicação . Para remover a aplicação, siga as instruções no Remover uma aplicação da autoria de si ou da sua organização.

Obter ajuda

Use o Microsoft Q&A para obter apoio da comunidade. Faça as suas perguntas sobre o Microsoft Q&A primeiro e navegue nos problemas existentes para ver se alguém já fez a sua pergunta antes. Certifique-se de que as suas perguntas ou comentários estão marcados com "azure-ad-adal-depreciação", "azure-ad-msal" e "dotnet-standard".

Se encontrar um bug na amostra, por favor levante a questão sobre as questões do GitHub.

Se encontrar um bug no MSAL.NET, por favor levante a questão sobre MSAL.NET Problemas do GitHub.

Para fornecer uma recomendação, aceda à página Voz do Utilizador.

Passos seguintes

Saiba mais sobre a construção de aplicações daemon que usam a plataforma de identidade da Microsoft para aceder a APIs web protegidas: