Поделиться через


Сценарий: вызов веб-API (от имени сценария)

Область применения: Windows Server 2022, Windows Server 2019, AD FS 2019 и более поздних версий

Узнайте, как создать веб-API, вызывающий другой веб-API от имени пользователя.

Прежде чем читать эту статью, вы должны ознакомиться с понятиями AD FS и потоком on-Behalf_Of

Обзор

  • Клиент (веб-приложение), не представленный на схеме ниже, вызывает защищенный веб-API и предоставляет маркер носителя JWT в заголовке HTTP "Авторизация".

  • Защищенный веб-API проверяет маркер и использует метод MSAL AcquireTokenOnBehalfOf для запроса (из AD FS) другого маркера, чтобы он смог, сам по себе, вызвать второй веб-API (с именем нижестоящий веб-API) от имени пользователя.

  • Защищенный веб-API использует этот маркер для вызова нижестоящего API. Он также может вызывать AcquireTokenSilentlater для запроса маркеров для других подчиненных API (но по-прежнему от имени того же пользователя). AcquireTokenSilent обновляет маркер при необходимости.

    overview

Чтобы лучше понять, как настроить от имени сценария проверки подлинности в AD FS, давайте рассмотрим пример, доступный здесь , и пошаговое руководство по регистрации и настройке кода приложения.

Предварительные требования

  • Клиентские средства GitHub
  • AD FS 2019 или более поздней версии, настроенные и запущенные
  • Visual Studio 2013 или более поздней версии

Регистрация приложений в AD FS

В этом разделе показано, как зарегистрировать собственное приложение в качестве общедоступного клиента и веб-API в качестве проверяющих сторон (RP) в AD FS

  1. В разделе "Управление AD FS" щелкните Группы приложений правой кнопкой мыши и выберите Добавить группу приложений.

  2. В мастере группы приложений введите имя WebApiToWebApi и в разделе "Клиентский сервер" выберите собственное приложение, обращающееся к шаблону веб-API. Нажмите кнопку Далее.

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

  3. Скопируйте значение идентификатора клиента. Он будет использоваться позже в качестве значения ClientId в файле app.config приложения. Введите следующий код ресурса (URI перенаправления):https://ToDoListClient. Нажмите кнопку Добавить. Нажмите кнопку Далее.

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

  4. На экране "Настройка веб-API" введите идентификатор:https://localhost:44321/. Нажмите кнопку Добавить. Нажмите кнопку Далее. Это значение будет использоваться позже в файлах App.config и Web.Config приложения.

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

  5. На экране "Применить контроль доступа политика" нажмите кнопку "Разрешить всем" и нажмите кнопку "Далее".

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

  6. На экране "Настройка разрешений приложения" выберите openid и user_impersonation. Нажмите кнопку Далее.

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

  7. На экране "Сводка" нажмите кнопку "Далее".

  8. На экране "Завершить" нажмите кнопку "Закрыть".

  9. В службе управления AD FS щелкните группы приложений и выберите группу приложений WebApiToWebApi . Щелкните его правой кнопкой мыши и выберите Свойства.

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

  10. На экране свойств WebApiToWebApi нажмите кнопку "Добавить приложение...".

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

  11. В разделе автономных приложений выберите серверное приложение.

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

  12. На экране серверного приложения добавьте https://localhost:44321/ в качестве идентификатора клиента и URI перенаправления.

    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. На экране "Настройка учетных данных приложения" выберите "Создать общий секрет". Скопируйте секрет для последующего использования.

    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. На экране "Сводка" нажмите кнопку "Далее".

  15. На экране "Завершить" нажмите кнопку "Закрыть".

  16. В службе управления AD FS щелкните группы приложений и выберите группу приложений WebApiToWebApi . Щелкните его правой кнопкой мыши и выберите Свойства.

    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. На экране свойств WebApiToWebApi нажмите кнопку "Добавить приложение...".

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

  18. В разделе автономных приложений выберите веб-API.

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

  19. При настройке веб-API добавьте https://localhost:44300 в качестве идентификатора.

    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. На экране "Применить контроль доступа политика" нажмите кнопку "Разрешить всем" и нажмите кнопку "Далее".

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

  21. На экране "Настройка разрешений приложения" нажмите кнопку "Далее".

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

  22. На экране "Сводка" нажмите кнопку "Далее".

  23. На экране "Завершить" нажмите кнопку "Закрыть".

  24. Нажмите кнопку ОК на экране свойств WebApiToWebApi — веб-API 2

  25. На экране свойств WebApiToWebApi выберите WebApiToWebApi — веб-API и нажмите кнопку "Изменить...".

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

  26. На экране "Свойства веб-API" в WebApiToWebApi выберите вкладку "Правила преобразования выдачи" и нажмите кнопку "Добавить правило...".

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

  27. В мастере добавления правила утверждения преобразования выберите "Отправить утверждения с помощью настраиваемого правила " в раскрывающемся списке и нажмите кнопку "Далее".

    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. Введите PassAllClaims в имени правила утверждения: поле и x:[] => issue(claim=x); правило утверждения в настраиваемом правиле: поле и нажмите кнопку "Готово".

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

  29. Нажмите кнопку "ОК" на экране свойств веб-API WebApiToWebApi

  30. На экране свойств WebApiToWebApi выберите WebApiToWebApi — веб-API 2 и нажмите кнопку "Изменить".
    Screenshot of the WebApiToWebApi Properties dialog box showing the WebApiToWebApi - Web A P I 2 application highlighted.

  31. На экране свойств WebApiToWebApi — веб-API 2 выберите вкладку "Правила преобразования выдачи" и нажмите кнопку "Добавить правило...

  32. В мастере добавления правила утверждения преобразования выберите "Отправить утверждения с помощью настраиваемого правила" в раскрывающемся списке и нажмите кнопку "Далее" 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. Введите PassAllClaims в имени правила утверждения: поле и x:[] => issue(claim=x); правило утверждения в настраиваемом правиле: поле и нажмите кнопку "Готово".

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

  34. Нажмите кнопку ОК на экране свойств WebApiToWebApi — экран свойств веб-API 2, а затем на экране свойств WebApiToWebApi.

Конфигурация кода

В этом разделе показано, как настроить веб-API для вызова другого веб-API

  1. Скачайте пример из этой страницы

  2. Открытие примера с помощью Visual Studio

  3. Откройте файл app.config. Измените следующее:

    • ida:Authority — введите https://[имя узла AD FS]/adfs/

    • ida:ClientId — введите значение из #3 в разделе "Регистрация приложений" в разделе AD FS выше.

    • ida:RedirectUri — введите значение из #3 в разделе "Регистрация приложений" в разделе AD FS выше.

    • todo:TodoListResourceId — введите значение идентификатора из #4 в разделе "Регистрация приложений" в разделе AD FS выше

    • ida: todo:TodoListBaseAddress — введите значение идентификатора из #4 в разделе "Регистрация приложений" в разделе AD FS выше.

      Screenshot of the App config file showing the modified values.

  4. Откройте файл web.config в toDoListService. Измените следующее:

    • ida:Audience — введите значение идентификатора клиента из #12 в разделе "Регистрация приложений" в разделе AD FS выше

    • ida:ClientId — введите значение идентификатора клиента из #12 в разделе "Регистрация приложений" в разделе AD FS выше.

    • Ida: ClientSecret — введите общий секрет, скопированный из #13 в разделе "Регистрация приложений" в разделе AD FS выше.

    • ida:RedirectUri — введите значение RedirectUri из #12 в разделе "Регистрация приложений" в разделе AD FS выше.

    • ida: AdfsMetadataEndpoint — введите https://[имя узла AD FS]/federationmetadata/2007-06/federationmetadata.xml

    • ida:OBOWebAPIBase — введите значение идентификатора из #19 в разделе "Регистрация приложений" в разделе AD FS выше.

    • ida:Authority — введите https://[имя узла AD FS]/adfs

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

  5. Откройте файл web.config в разделе WebAPIOBO. Измените следующее:

    • ida: AdfsMetadataEndpoint — введите https://[имя узла AD FS]/federationmetadata/2007-06/federationmetadata.xml

    • ida:Audience — введите значение идентификатора клиента из #12 в разделе "Регистрация приложений" в разделе AD FS выше

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

Тестирование примера

В этом разделе показано, как протестировать пример, настроенный выше.

После внесения изменений в код решения

  1. В Visual Studio щелкните правой кнопкой мыши решение и выберите " Задать начальные проекты" ...

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

  2. На страницах свойств убедитесь, что для каждого из проектов задано значение "Действие", за исключением 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. В верхней части Visual Studio щелкните зеленую стрелку.

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

  4. На главном экране собственного приложения нажмите кнопку "Войти".

    Screenshot of the To Do List Client dialog box.

    Если экран собственного приложения не отображается, выполните поиск и удаление *msalcache.bin файлов из папки, в которой репозиторий проекта сохраняется в вашей системе.

  5. Вы будете перенаправляться на страницу входа AD FS. Выполните вход.

    Screenshot of the Sign In page.

  6. После входа введите текстовый веб-API в вызов веб-API в элементе Create a Список дел. Нажмите кнопку "Добавить элемент". При этом веб-API (Список дел служба списка), который затем вызывает веб-API 2 (WebAPIOBO) и добавляет элемент в кэш.

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

Next Steps

Подключения AD FS OpenID или потоки OAuth и сценарии использования приложений