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


Scenario: Web API calling Web API (On Behalf Of Scenario)

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

Before reading this article, you should be familiar with the AD FS concepts and On-Behalf_Of flow

Обзор

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

  • The protected Web API validates the token and uses the MSAL AcquireTokenOnBehalfOf method to request (from AD FS) another token so that it can, itself, call a second web API (named the downstream web API) on behalf of the user.

  • Защищенный веб-API использует этот маркер для вызова нижестоящего API. It can also call AcquireTokenSilentlater to request tokens for other downstream APIs (but still on behalf of the same user). AcquireTokenSilent обновляет маркер при необходимости.

    обзор

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.

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

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

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

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

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

  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. Нажмите кнопку Далее.

    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 приложения.

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

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

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

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

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

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

  8. On the Complete screen, click Close.

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

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

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

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

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

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

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

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

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

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

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

  15. On the Complete screen, click Close.

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

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

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

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

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

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

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

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

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

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

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

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

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

  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 выберите вкладку "Правила преобразования выдачи" и нажмите кнопку "Добавить правило...".

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

  27. On Add Transform Claim Rule Wizard, select Send Claims Using a Custom Rule from dropdown and click Next.

    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. Enter PassAllClaims in Claim rule name: field and x:[] => issue(claim=x); claim rule in Custom rule: field and click Finish.

    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 и нажмите кнопку "Изменить".
    Снимок экрана: диалоговое окно свойств WebApiToWebApi с выделенным приложением WebApiToWebApi — Web A P I 2.

  31. On WebApiToWebApi – Web API 2 Properties screen, select Issuance Transform Rules tab and click Add Rule…

  32. On Add Transform Claim Rule Wizard, select Send Claims Using a Custom Rule from dropdown and click Next 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. Enter PassAllClaims in Claim rule name: field and x:[] => issue(claim=x); claim rule in Custom rule: field and click Finish.

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

  34. Click OK on WebApiToWebApi – Web API 2 Properties screen and then on WebApiToWebApi Properties screen.

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

В этом разделе показано, как настроить веб-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 – enter the Identifier value from #4 in App Registration in AD FS section above

    • ida: todo:TodoListBaseAddress - enter the Identifier value from #4 in App Registration in AD FS section above.

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

  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. Go ahead and sign in.

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

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

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

Следующие шаги

AD FS OpenID Connect/OAuth flows and Application Scenarios