Compartilhar via


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

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.

    visão geral

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 Próximo.

    Captura de tela da página inicial do Assistente para Adicionar Grupo de Aplicativos mostrando o modelo Aplicativo nativo acessando uma API Web realçado.

  3. Copie o valor Identificador de 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 Próximo.

    Captura de tela da página Aplicativo nativo do Assistente para Adicionar Grupo de Aplicativos mostrando o URI de redirecionamento.

  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.

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

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

    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 todos realçada.

  6. Na tela Configurar Permissões de Aplicativo, selecione openid e user_impersonation. Clique em Próximo.

    Captura de tela da página Configurar Permissões de Aplicativo do Assistente para Adicionar Grupo de Aplicativos mostrando o I D aberto selecionado.

  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.

    Captura de tela da caixa de diálogo Gerenciamento do AD FS 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 tela da caixa de diálogo Propriedades WebApiToWebApi mostrando o aplicativo WebApiToWebApi – Web A P I listado.

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

    Captura de tela da página De boas-vindas do assistente Adicionar um aplicativo ao WebApiToWebApi mostrando a opção Aplicativo de servidor realçada.

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

    Captura de tela da página Aplicativo do servidor do assistente Adicionar um aplicativo ao WebApiToWebApi mostrando o identificador de cliente correto e redirecionar a U R I.

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

    Captura de tela da página 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. 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.

    Segunda captura de tela da caixa de diálogo Gerenciamento do AD FS 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 tela da caixa de diálogo Propriedades webApiToWebApi mostrando o aplicativo WebApiToWebApi – Web API I listado.

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

    Captura de tela da página Boas-vindas do assistente Adicionar um aplicativo ao WebApiToWebApi mostrando a opção Web A P I realçada.

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

    Captura de tela da página Configurar API da Web do assistente Adicionar um novo aplicativo ao WebApiToWebApi mostrando o U R I de redirecionamento correto.

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

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

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

    Captura de tela da página Configurar Permissões de Aplicativo do assistente Adicionar um aplicativo ao WebApiToWebApi mostrando a opção Avançar destacada.

  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....

    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 a guia Regras de Transformação de Emissão e clique em Adicionar Regra....

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

  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.

    Captura de tela da página Selecionar Modelo de Regra do Assistente de Adição de Regras de Declaração de Transformação que mostra a opção Enviar declarações usando uma regra personalizada.

  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.

    Captura de tela da página Configurar Regra do 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 de WebApiToWebApi, selecione WebApiToWebApi – API Web 2 e clique em Editar...
    Captura de tela da caixa de diálogo Propriedades webApiToWebApi mostrando o aplicativo WebApiToWebApi – Web A P I 2 realçado.

  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 Declaração de Transformação, selecione Enviar Declarações Usando uma Regra Personalizada na lista suspensa e clique em Avançar Segunda captura de tela da página Selecionar Modelo de Regra do Assistente para Adicionar Regra de Declaração de Transformação mostrando a opção Enviar Declarações Usando uma Regra Personalizada selecionada.

  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.

    Segunda captura de tela 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 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 de nº 4 em Registro de Aplicativo na seção do 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 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

      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 – 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

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

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...

    Captura de tela da lista que aparece ao clicar com o botão direito do mouse na solução com a opção Definir Projetos de Inicialização realçada.

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

    Captura de tela da caixa de diálogo Páginas de Propriedade de 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 realçada.

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

    Captura de tela da caixa de diálogo Cliente de Lista de Tarefas Pendentes.

    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.

    Captura de tela da página de Entrada.

  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.

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

Próximas etapas

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