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


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

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

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

Overview

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

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

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

    overview

To better understand how to configure on behalf of auth scenario in AD FS, let's use a sample available here and walkthrough the app registration and code configuration steps.

Pre-requisites

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

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

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

  1. In AD FS Management, right-click on Application Groups and select Add Application Group.

  2. On the Application Group Wizard, for the Name enter WebApiToWebApi and under Client-Server applications select the Native application accessing a Web API template. Click Next.

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

  3. Copy the Client Identifier value. It will be used later as the value for ClientId in the application's App.config file. Enter the following for Redirect URI: - https://ToDoListClient. Click Add. Click Next.

    Скриншот страницы нативного приложения мастера добавления группы приложений, показывающий перенаправление U R I.

  4. On the Configure Web API screen, enter the Identifier:https://localhost:44321/. Click Add. Click Next. This value will be used later in the application's App.config and Web.Config files.

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

  5. On the Apply Access Control Policy screen, select Permit everyone and click Next.

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

  6. On the Configure Application Permissions screen, select openid and user_impersonation. Click Next.

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

  7. On the Summary screen, click Next.

  8. On the Complete screen, click Close.

  9. In AD FS Management, click on Application Groups and select WebApiToWebApi application group. Right-click and select Properties.

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

  10. On WebApiToWebApi properties screen, click Add application….

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

  11. Under Standalone applications, select Server application.

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

  12. On Server Application screen, add https://localhost:44321/ as the Client Identifier and Redirect URI.

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

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

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

  14. On the Summary screen, click Next.

  15. On the Complete screen, click Close.

  16. In AD FS Management, click on Application Groups and select WebApiToWebApi application group. Right-click and select Properties.

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

  17. On WebApiToWebApi properties screen, click Add application….

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

  18. Under Standalone applications, select Web API.

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

  19. On Configure Web API, add https://localhost:44300 as the Identifier.

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

  20. On the Apply Access Control Policy screen, select Permit everyone and click Next.

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

  21. On the Configure Application Permissions screen, click Next.

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

  22. On the Summary screen, click Next.

  23. On the Complete screen, click Close.

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

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

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

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

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

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

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

  28. Enter PassAllClaims in Claim rule name: field and x:[] => issue(claim=x); claim rule in Custom rule: field and click Finish.

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

  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 — Web API 2, а затем на экране свойств WebApiToWebApi.

Code Configuration

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

  1. Download the sample from here

  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. On the Properties pages make sure Action is set to Start for each of the Projects, except TodoListSPA.

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

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

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

  4. On the Native App's Main Screen, click on Sign In.

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

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

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

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

  6. После входа в систему введите текст Web Api в поле вызова Web Api в элементе «Создать задание». Click Add item. Это вызовет веб-API (Служба списка дел), которое затем вызывает веб-API 2 (WebAPIOBO) и добавляет элемент в кэш.

    Снимок экрана: диалоговое окно клиента списка дел с новым элементом, заполняющим раздел

Next Steps

Потоки AD FS OpenID Connect/OAuth и сценарии приложений