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


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

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

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

Обзор

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

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

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

    обзор

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

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

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

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

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

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

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

    Снимок экрана: страница приветствия мастера добавления группы приложений с выделенным шаблоном веб-API собственного приложения.

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

    Снимок экрана: страница собственного приложения мастера добавления группы приложений с перенаправлением U R I.

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

    Снимок экрана: страница

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

    Снимок экрана: страница

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

    Снимок экрана: страница

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

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

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

    Снимок экрана: диалоговое окно

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

    Снимок экрана: диалоговое окно свойств WebApiToWebApi с указанным приложением WebApiToWebApi — Web A I.

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

    Снимок экрана: страница приветствия мастера добавления нового приложения в WebApiToWebApi с выделенным параметром приложения Server.

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

    Снимок экрана: страница

  13. На экране "Настройка учетных данных приложения" выберите "Создать общий секрет". Скопируйте секрет для последующего использования.

    Снимок экрана: страница приложения

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

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

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

    Второй снимок экрана: диалоговое окно

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

    Второй снимок экрана: диалоговое окно свойств WebApiToWebApi с указанным приложением WebApiToWebApi — Web A I.

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

    Снимок экрана: страница приветствия мастера добавления нового приложения в WebApiToWebApi с выделенным параметром Web A P I.

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

    Снимок экрана: страница

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

    Снимок экрана: страница

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

    Снимок экрана: страница

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

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

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

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

    Снимок экрана: диалоговое окно свойств WebApiToWebApi с выделенным приложением WebApiToWebApi — Web A I.

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

    Снимок экрана: диалоговое окно

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

    Снимок экрана: страница

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

    Снимок экрана: страница

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

  30. На экране свойств WebApiToWebApi выберите WebApiToWebApi — веб-API 2 и нажмите кнопку "Изменить".
    Снимок экрана: диалоговое окно свойств WebApiToWebApi с выделенным приложением WebApiToWebApi — Web A P I 2.

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

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

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

    Второй снимок экрана: страница

  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 выше.

      Снимок экрана: файл конфигурации приложения с измененными значениями.

  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

      Снимок экрана: файл веб-конфигурации в toDoListService с измененными значениями.

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

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

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

      Снимок экрана: файл веб-конфигурации в webAPIOBO с измененными значениями.

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

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

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

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

    Снимок экрана: список, который отображается при щелчке правой кнопкой мыши решения с выделенным параметром

  2. На страницах свойств убедитесь, что для каждого из проектов задано значение "Действие", за исключением TodoListSPA.

    Снимок экрана: диалоговое окно

  3. В верхней части Visual Studio щелкните зеленую стрелку.

    Снимок экрана: пользовательский интерфейс Visual Studio с указанным параметром

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

    Снимок экрана: диалоговое окно Список дел Список клиентов.

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

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

    Снимок экрана: страница входа.

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

    Снимок экрана: диалоговое окно

Next Steps

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