Cenário: API Web chamando API Web (Cenário On-Behalf-Of)

Aplica-se a: Windows Server 2022, Windows Server 2019, AD FS 2019 e posterior

Saiba como criar uma API Web chamando outra API Web em nome do usuário.

Antes de ler este artigo, você deve estar familiarizado com os conceitos do AD FS e o fluxo Behalf_Of

Visão geral

  • Um cliente (aplicativo Web), não representado no diagrama abaixo, chama uma API Web protegida e fornece um token de portador JWT em seu cabeçalho Http "Autorização".

  • A API Web protegida valida o token e usa o método MSAL AcquireTokenOnBehalfOf para solicitar (do AD FS) outro token para que possa, por si só, chamar uma segunda API Web (chamada de API Web downstream) em nome do usuário.

  • A API Web protegida usa esse token para chamar uma API Web downstream. Também pode chamara AcquireTokenSilentlater para solicitar tokens para outras APIs downstream (mas ainda em nome do mesmo usuário). AcquireTokenSilent atualiza o token quando necessário.

    overview

Para entender melhor como configurar em nome do cenário de autenticação no AD FS, vamos usar um exemplo disponível aqui e acompanhar passo a passo a configuração de código e registro do aplicativo.

Pré-requisitos

  • Ferramentas de cliente do GitHub
  • AD FS 2019 ou posterior configurado e em execução
  • Visual Studio 2013 ou posterior.

Registro de aplicativo no AD FS

Esta seção mostra como registrar o Aplicativo Nativo como um cliente público e APIs Web como RP (Terceiras Partes Confiáveis) no AD FS

  1. No Gerenciamento dos AD FS, clique com o botão direito do mouse em Grupos de Aplicativos e selecione Adicionar Grupo de Aplicativos.

  2. No Assistente de Grupo de Aplicativos, para o Nome, insira WebApiToWebApi e, em Aplicativos cliente-servidor, selecione o aplicativo Nativo acessando um modelo de API Web. Clique em Avançar.

    Screenshot of the Welcome page of the Add Application Group Wizard showing the Native application accessing a Web API template highlighted.

  3. Copiar o valor do Identificador do Cliente. Ele será usado posteriormente como o valor de ClientId no arquivo App.config do aplicativo. Insira o seguinte para URI de redirecionamento: – https://ToDoListClient. Clique em Adicionar. Clique em Avançar.

    Screenshot of the Native application page of the Add Application Group Wizard showing the redirect U R I .

  4. Na tela Configurar API Web, insira o Identificador:https://localhost:44321/. Clique em Adicionar. Clique em Próximo. Esse valor será usado posteriormente nos arquivos App.config e Web.config do aplicativo.

    Screenshot of the Configure Web API page of the Add Application Group Wizard showing the correct identifier.

  5. Na tela Aplicar Política de Controle de Acesso, selecione Permitir todos e clique em Avançar.

    Screenshot of the Choose Access Control Policy page of the Add Application Group Wizard showing the Permit everyone option highlighted.

  6. Na tela Configurar Permissões de Aplicativo, selecione openid e user_impersonation. Clique em Avançar.

    Screenshot of the Configure Application Permissions page of the Add Application Group Wizard showing open I D selected.

  7. Na tela Resumo, clique em Avançar.

  8. Na tela Concluído, clique em Fechar.

  9. No Gerenciamento do AD FS, clique em Grupos de Aplicativos e selecione o grupo de aplicativos WebApiToWebApi. Clique com o botão direito do mouse e selecione Propriedades.

    Screenshot of the A D F S Management dialog box showing the WebApiToWebApi group highlighted and the Properties option in the dropdown list.

  10. Na tela de propriedades WebApiToWebApi, clique em Adicionar aplicativo….

    Screenshot of the WebApiToWebApi Properties dialog box showing the WebApiToWebApi - Web A P I application listed.

  11. Em Aplicativos autônomos, selecione Aplicativo de servidor.

    Screenshot of the Welcome page of the Add a new application to WebApiToWebApi wizard showing the Server application option highlighted.

  12. Na tela Aplicativo de Servidor, adicione https://localhost:44321/ como o Identificador do Cliente e o URI de Redirecionamento.

    Screenshot of the Server application page of the Add a new application to WebApiToWebApi wizard showing the correct client identifier and redirect U R I.

  13. Na tela Configurar Credenciais do Aplicativo, selecione Gerar um segredo compartilhado. Copie o segredo para uso posterior.

    Screenshot of the Configure Application Credentials application page of the Add a new application to WebApiToWebApi wizard showing the Generate a shared secret option selected and the generated shared secret highlighted.

  14. Na tela Resumo, clique em Avançar.

  15. Na tela Concluído, clique em Fechar.

  16. No Gerenciamento do AD FS, clique em Grupos de Aplicativos e selecione o grupo de aplicativos WebApiToWebApi. Clique com o botão direito do mouse e selecione Propriedades.

    Second screenshot of the A D F S Management dialog box showing the WebApiToWebApi group highlighted and the Properties option in the dropdown list.

  17. Na tela de propriedades WebApiToWebApi, clique em Adicionar aplicativo….

    Second screenshot of the WebApiToWebApi Properties dialog box showing the WebApiToWebApi - Web A P I application listed.

  18. Em Aplicativos autônomos, selecione API Web.

    Screenshot of the Welcome page of the Add a new application to WebApiToWebApi wizard showing the Web A P I option highlighted.

  19. Em Configurar API Web, adicione https://localhost:44300 como o Identificador.

    Screenshot of the Configure Web A P I page of the Add a new application to WebApiToWebApi wizard showing the correct redirect U R I.

  20. Na tela Aplicar Política de Controle de Acesso, selecione Permitir todos e clique em Avançar.

    Screenshot of the Choose Access Control Policy page of the Add a new application to WebApiToWebApi wizard showing the Permit everyone option highlighted.

  21. Na tela Configurar Permissões de Aplicativo, clique em Avançar.

    Screenshot of the Configure Application Permissions page of the Add a new application to WebApiToWebApi wizard showing the Next option called out.

  22. Na tela Resumo, clique em Avançar.

  23. Na tela Concluído, clique em Fechar.

  24. Clique em OK na tela WebApiToWebApi – Propriedades da API Web 2

  25. Na tela Propriedades de WebApiToWebApi, selecione WebApiToWebApi – API Web e clique em Editar....

    Screenshot of the WebApiToWebApi Properties dialog box showing the WebApiToWebApi - Web A P I application highlighted.

  26. Na tela WebApiToWebApi – Propriedades da API Web, selecione a guia Regras de Transformação de Emissão e clique em Adicionar Regra....

    Screenshot of the WebApiToWebApi - Web A P I Properties dialog box showing the Issuance Transform Rules tab.

  27. Em Adicionar Assistente de Regra de Declaração de Transformação, selecione Enviar Declarações Usando uma Regra Personalizada na lista suspensa e clique em Avançar.

    Screenshot of the Select Rule Template page of the Add Transform Claim Rule Wizard showing the Send Claims Using a Custom Rule option selected.

  28. Insira PassAllClaims no campo Nome da regra de declaração: e a regra de declaração x:[] => issue(claim=x); em Regra personalizada: campo e clique em Concluir.

    Screenshot of the Configure Rule page of the Add Transform Claim Rule Wizard showing the configuration explained above.

  29. Clique em OK na tela WebApiToWebApi – Propriedades da API Web

  30. Na tela Propriedades da WebApiToWebApi, selecione WebApiToWebApi - API Web 2 e clique em Editar...
    Screenshot of the WebApiToWebApi Properties dialog box showing the WebApiToWebApi - Web A P I 2 application highlighted.

  31. Na tela Propriedades da WebApiToWebApi – API Web 2, selecione a guia Regras de Transformação de Emissão e clique em Adicionar Regra…

  32. No Assistente para Adicionar Regra de Reivindicação de Transformação, selecione Enviar Declarações Utilizando uma Regra Personalizada na lista suspensa e clique em Avançar Second screenshot of the Select Rule Template page of the Add Transform Claim Rule Wizard showing the Send Claims Using a Custom Rule option selected.

  33. Insira PassAllClaims no campo Nome da regra de declaração: e a regra de declaração x:[] => issue(claim=x); em Regra personalizada: campo e clique em Concluir.

    Second screenshot of the Configure Rule page of the Add Transform Claim Rule Wizard showing the configuration explained above.

  34. Clique em OK na tela Propriedades da WebApiToWebApi – API Web 2 e então na tela Propriedades da WebApiToWebApi.

Configuração de código

Esta seção mostra como configurar uma API Web para chamar outra API Web

  1. Baixe o exemplo aqui

  2. Abrir o exemplo usando o Visual Studio

  3. Abra o arquivo App.config. Modifique o seguinte:

    • ida:Authority – insira https://[nome do host do AD FS]/adfs/

    • ida:ClientId – insira o valor de #3 na seção Registro de Aplicativo no AD FS acima.

    • ida:RedirectUri – insira o valor de #3 na seção Registro de Aplicativo no AD FS acima.

    • todo:TodoListResourceId – insira o valor do Identificador de nº 4 no Registro de Aplicativo na seção do AD FS acima.

    • ida: todo:TodoListBaseAddress: insira o valor do identificador do item 4 da seção Registro de Aplicativos no AD FS acima.

      Screenshot of the App config file showing the modified values.

  4. Abra o arquivo Web.config em ToDoListService. Modifique o seguinte:

    • ida:Audience – insira o valor do Identificador do Cliente do nº 12 na seção Registro de Aplicativo no AD FS acima

    • ida:ClientId – insira o valor do Identificador do Cliente de nº 12 em Registro de Aplicativo na seção do AD FS acima.

    • Ida: ClientSecret – insira o segredo compartilhado copiado do nº 13 na seção Registro de Aplicativo no AD FS acima.

    • ida:RedirectUri – insira o valor RedirectUri de #12 na seção Registro de Aplicativo no AD FS acima.

    • ida: AdfsMetadataEndpoint – insira https://[your AD FS hostname]/federationmetadata/2007-06/federationmetadata.xml

    • ida:OBOWebAPIBase –insira o valor identificador de nº 19 na seção Registro de Aplicativo no AD FS acima.

    • ida:Authority – insira https://[nome do host do AD FS]/adfs

      Screenshot of the web config file under ToDoListService showing the modified values.

  5. Abra o arquivo Web.config em WebAPIOBO. Modifique o seguinte:

    • ida: AdfsMetadataEndpoint – insira https://[your AD FS hostname]/federationmetadata/2007-06/federationmetadata.xml

    • ida:Audience – insira o valor do Identificador do Cliente do nº 12 na seção Registro de Aplicativo no AD FS acima

      Screenshot of the web config file under WebAPIOBO showing the modified values.

O exemplo de teste

Esta seção mostra como testar o exemplo configurado acima.

Após as alterações de código, recompile a solução

  1. No Visual Studio, clique com o botão direito do mouse na solução e selecione Definir Projetos de Inicialização...

    Screenshot of the list that appears when you right-click the solution with the Set Start Up Projects option highlighted.

  2. Nas páginas Propriedades, verifique se Ação está definida como Iniciar para cada um dos Projetos, exceto TodoListSPA.

    Screenshot of the Solution Property Pages dialog box showing the Multiple startup project option selected and all of the projects' actions set to Start.

  3. Na parte superior do Visual Studio, clique na seta verde.

    Screenshot of the Visual Studio UI with the Start option called out.

  4. Na tela principal do Aplicativo Nativo, clique em Entrar.

    Screenshot of the To Do List Client dialog box.

    Se você não vir a tela do aplicativo nativo, pesquise e remova os arquivos *msalcache.bin da pasta em que o repositório do projeto é salvo em seu sistema.

  5. Você será redirecionado para a página de logon do AD FS. Vá em frente e entre.

    Screenshot of the Sign In page.

  6. Depois de conectado, insira a API Web de texto na Chamada à API Web em Criar um item de tarefa. Clique em Adicionar Item. Isso chamará a API Web (Serviço de Lista de Tarefas Pendentes) que então chamará a API Web 2 (WebAPIOBO) e adicionará o item no cache.

    Screenshot of the To Do List Client dialog box with the new to do item populating the To Do Items section.

Próximas etapas

Fluxos e cenários de aplicativo do AD FS OpenID Connect/OAuth