Partilhar via


Cenário: API Web chamando API Web (em nome do cenário)

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

Antes de ler este artigo, deve estar familiarizado com os conceitos do AD FS e fluxo Em_Nome_De

Overview

  • Um cliente (Web App) - 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 da Web protegida valida o token e usa o método MSAL AcquireTokenOnBehalfOf para solicitar (do AD FS) outro token para que ele possa, por si só, chamar uma segunda API da Web (chamada de API da Web downstream) em nome do usuário.

  • A API da Web protegida usa esse token para chamar uma API downstream. Ele também pode chamar 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 percorrer as etapas de registro e configuração de código do aplicativo.

Pre-requisites

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

Registo de Aplicações no AD FS

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

  1. No Gerenciamento do 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 , digite WebApiToWebApi e, em Client-Server aplicativos , selecione o aplicativo nativo acessando um modelo de API Web . Clique em Next.

    Captura de tela da página Bem-vindo do Assistente para Adicionar Grupo de Aplicativos mostrando o aplicativo nativo acessando um modelo de API Web realçado.

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

    Captura de ecrã da página de Aplicação Nativa do Assistente para Adicionar um Grupo de Aplicações mostrando o redirecionamento URI.

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

    Captura de tela da página Configurar API Web do Assistente para Adicionar Grupo de Aplicativos mostrando o identificador correto.

  5. No ecrã Aplicar Política de Controle de Acesso, selecione Permitir a todos e clique em Seguinte.

    Captura de tela da página Escolher Política de Controle de Acesso do Assistente para Adicionar Grupo de Aplicativos mostrando a opção Permitir a todos realçada.

  6. Na tela Configurar Permissões do Aplicativo, selecione openid e user_impersonation. Clique em Next.

    Captura de ecrã da página Configurar Permissões de Aplicação do Assistente para Adicionar Grupo de Aplicações mostrando o ID aberto selecionado.

  7. No ecrã de Resumo, clique em Seguinte.

  8. No ecrã Concluído, clique em Fechar.

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

    Captura de tela da caixa de diálogo Gerenciamento de A D F S mostrando o grupo WebApiToWebApi realçado e a opção Propriedades na lista suspensa.

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

    Captura de ecrã da caixa de diálogo Propriedades WebApiToWebApi mostrando a aplicação WebApiToWebApi - Web A P I listada.

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

    Captura de tela da página Bem-vindo do assistente Adicionar um novo aplicativo ao WebApiToWebApi mostrando a opção Aplicativo Servidor realçada.

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

    Captura de ecrã da página da aplicação de servidor do assistente Adicionar uma nova aplicação ao WebApiToWebApi mostrando o identificador de cliente correto e a URI de redirecionamento.

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

    Captura de tela da página do aplicativo Configurar Credenciais de Aplicativo do assistente Adicionar um novo aplicativo ao WebApiToWebApi mostrando a opção Gerar um segredo compartilhado selecionada e o segredo compartilhado gerado realçado.

  14. No ecrã de Resumo, clique em Seguinte.

  15. No ecrã Concluído, clique em Fechar.

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

    Segunda captura de ecrã da caixa de diálogo Gestão de A D F S mostrando o grupo WebApiToWebApi realçado e a opção Propriedades na lista suspensa.

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

    Segunda captura de ecrã da janela de diálogo Propriedades WebApiToWebApi mostrando o aplicativo WebApiToWebApi - Web A P I listado.

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

    Captura de ecrã da página de boas-vindas do assistente Adicionar um novo aplicativo ao WebApiToWebApi com a opção Web A P I destacada.

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

    Captura de ecrã da página Configurar Web API do assistente Adicionar uma nova aplicação ao WebApiToWebApi, mostrando o URI de redirecionamento correto.

  20. No ecrã Aplicar Política de Controle de Acesso, selecione Permitir a todos e clique em Seguinte.

    Captura de tela da página Escolher Política de Controle de Acesso do assistente Adicionar um novo aplicativo ao WebApiToWebApi mostrando a opção Permitir todos realçada.

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

    Captura de ecrã da página Configurar Permissões de Aplicação do assistente Adicionar um novo aplicativo ao WebApiToWebApi, mostrando a opção Seguinte assinalada.

  22. No ecrã de Resumo, clique em Seguinte.

  23. No ecrã Concluído, clique em Fechar.

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

  25. No ecrã Propriedades do WebApiToWebApi, selecione WebApiToWebApi – Web API e clique em Editar....

    Captura de tela da caixa de diálogo Propriedades WebApiToWebApi mostrando o aplicativo WebApiToWebApi - Web A P I realçado.

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

    Captura de tela da caixa de diálogo WebApiToWebApi - Web A P I Properties mostrando a guia Regras de Transformação de Emissão.

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

    Captura de ecrã da página Selecionar Modelo de Regra do Assistente para Adicionar Regra de Declaração Transformada, mostrando a opção Enviar Declarações Usando uma Regra Personalizada selecionada.

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

    Captura de ecrã da página de configuração da regra no Assistente para Adicionar Regra de Declaração de Transformação, mostrando a configuração explicada acima.

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

  30. Na tela Propriedades WebApiToWebApi, selecione WebApiToWebApi – Web API 2 e clique em Editar...
    Captura de ecrã da caixa de diálogo Propriedades WebApiToWebApi a mostrar a aplicação WebApiToWebApi - Web A P I 2 realçada.

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

  32. No Assistente para Adicionar Regra de Transformação de Reclamações, selecione no menu suspenso a opção Enviar Reclamações Usando uma Regra Personalizada e clique em Seguinte Segunda captura de ecrã da página Selecionar Modelo de Regra do Assistente para Adicionar Regra de Transformação de Reclamações mostrando a opção Enviar Reclamações Usando uma Regra Personalizada selecionada.

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

    Segunda captura de ecrã da página Configurar Regra do Assistente para Adicionar Regra de Declaração de Transformação, mostrando a configuração explicada acima.

  34. Clique em OK na tela WebApiToWebApi – Web API 2 Properties e, em seguida, na tela WebApiToWebApi Properties.

Configuração de código

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

  1. Faça o download do exemplo do aqui

  2. Abrir o exemplo usando o Visual Studio

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

    • ida:Authority - digite https://[seu nome de 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 indicado no item #3 na seção de Registo de Aplicação na AD FS mencionada acima.

    • todo:TodoListResourceId – introduza o valor do identificador do #4 na seção de Registro de Aplicativo no AD FS acima

    • ida: todo:TodoListBaseAddress - insira o valor Identifier de #4 na seção Registro de aplicativo no AD FS acima.

      Captura de tela do arquivo de configuração do aplicativo mostrando os valores modificados.

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

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

    • ida:ClientId - insira o valor do Identificador do Cliente de #12 na seção Registro de Aplicativo no AD FS acima.

    • Ida: ClientSecret - insira o segredo compartilhado copiado de #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 - digite https://[seu nome de host do AD FS]/federationmetadata/2007-06/federationmetadata.xml

    • ida:OBOWebAPIBase - insira o valor do Identificador de #19 na seção Registro de Aplicativo no AD FS acima.

    • ida:Authority - digite https://[seu nome de host do AD FS]/adfs

      Captura de tela do arquivo de configuração da Web em ToDoListService mostrando os valores modificados.

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

    • ida: AdfsMetadataEndpoint - digite https://[seu nome de host do AD FS]/federationmetadata/2007-06/federationmetadata.xml

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

      Captura de tela do arquivo de configuração da web em WebAPIOBO mostrando os valores modificados.

Testar a amostra

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

Depois que as alterações de código forem feitas, reconstrua 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...

    Captura de ecrã da lista que aparece quando clica com o botão direito do rato na solução com a opção Configurar projetos de arranque realçada.

  2. Nas páginas Propriedades , verifique se Action está definido como Start para cada um dos Projetos, exceto TodoListSPA.

    Captura de tela da caixa de diálogo Páginas de propriedades da solução mostrando a opção Vários projetos de inicialização selecionada e todas as ações dos projetos definidas como Iniciar.

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

    Captura de tela da interface do usuário do Visual Studio com a opção Iniciar destacada.

  4. Na tela principal do aplicativo nativo, clique em Entrar.

    Captura de tela da caixa de diálogo Cliente da lista de tarefas.

    Se você não vir a tela nativa do aplicativo, pesquise e remova os arquivos *msalcache.bin da pasta onde o repositório de projetos está salvo em seu sistema.

  5. Será encaminhado para a página de login do AD FS. Vá em frente e faça login.

    Captura de ecrã da página Iniciar sessão.

  6. Depois de iniciar sessão, insira o texto "Api Web para Chamada de Api Web" no item "Criar uma Tarefa". Clique em Adicionar item. Isso chamará a API da Web (Serviço de Lista de Tarefas) que, em seguida, chama a API da Web 2 (WebAPIOBO) e adiciona o item no cache.

    Captura de tela da caixa de diálogo Cliente da Lista de Tarefas com o novo item a fazer preenchendo a seção Itens a Fazer.

Próximas Etapas

Fluxos OpenID Connect/OAuth do AD FS e Cenários de Aplicação