Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как создать веб-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.
В разделе "Управление AD FS" щелкните Группы приложений правой кнопкой мыши и выберите Добавить группу приложений.
On the Application Group Wizard, for the Name enter WebApiToWebApi and under Client-Server applications select the Native application accessing a Web API template. Нажмите кнопку Далее.
Скопируйте значение идентификатора клиента. Он будет использоваться позже в качестве значения ClientId в файле app.config приложения. Введите следующую информацию для URI перенаправления:https://ToDoListClient. Нажмите кнопку Добавить. Нажмите кнопку Далее.
На экране "Настройка веб-API" введите идентификатор:https://localhost:44321/. Нажмите кнопку Добавить. Нажмите кнопку Далее. Это значение будет использоваться позже в файлах App.config и Web.Config приложения.
На экране "Применить политику контроля доступа" выберите "Разрешить для всех" и нажмите "Далее".
На экране "Настройка разрешений приложения" выберите openid и user_impersonation. Нажмите кнопку Далее.
На экране "Сводка" нажмите кнопку "Далее".
On the Complete screen, click Close.
В управлении AD FS щелкните Группы приложений и выберите группу приложений WebApiToWebApi. Щелкните его правой кнопкой мыши и выберите Свойства.
На экране свойств WebApiToWebApi нажмите кнопку "Добавить приложение...".
В разделе автономных приложений выберите серверное приложение.
На экране серверного приложения добавьте https://localhost:44321/ в качестве идентификатора клиента и URI перенаправления.
На экране "Настройка учетных данных приложения" выберите "Создать общий секрет". Скопируйте секрет для последующего использования.
На экране "Сводка" нажмите кнопку "Далее".
On the Complete screen, click Close.
В управлении AD FS щелкните Группы приложений и выберите группу приложений WebApiToWebApi. Щелкните его правой кнопкой мыши и выберите Свойства.
На экране свойств WebApiToWebApi нажмите кнопку "Добавить приложение...".
В разделе автономных приложений выберите веб-API.
При настройке веб-API добавьте https://localhost:44300 в качестве идентификатора.
На экране "Применить политику контроля доступа" выберите "Разрешить для всех" и нажмите "Далее".
На экране "Настройка разрешений приложения" нажмите кнопку "Далее".
На экране "Сводка" нажмите кнопку "Далее".
On the Complete screen, click Close.
Нажмите ОК на экране свойств WebApiToWebApi — Web API 2.
На экране свойств WebApiToWebApi выберите WebApiToWebApi — веб-API и нажмите кнопку "Изменить...".
На экране "Свойства веб-API" в WebApiToWebApi выберите вкладку "Правила преобразования выдачи" и нажмите кнопку "Добавить правило...".
On Add Transform Claim Rule Wizard, select Send Claims Using a Custom Rule from dropdown and click Next.
Enter PassAllClaims in Claim rule name: field and x:[] => issue(claim=x); claim rule in Custom rule: field and click Finish.
Нажмите кнопку "ОК" на экране свойств веб-API WebApiToWebApi
На экране свойств WebApiToWebApi выберите WebApiToWebApi — веб-API 2 и нажмите кнопку "Изменить".
On WebApiToWebApi – Web API 2 Properties screen, select Issuance Transform Rules tab and click Add Rule…
On Add Transform Claim Rule Wizard, select Send Claims Using a Custom Rule from dropdown and click Next
Enter PassAllClaims in Claim rule name: field and x:[] => issue(claim=x); claim rule in Custom rule: field and click Finish.
Click OK on WebApiToWebApi – Web API 2 Properties screen and then on WebApiToWebApi Properties screen.
Конфигурация кода
В этом разделе показано, как настроить веб-API для вызова другого веб-API
Скачайте пример из этой страницы
Открытие примера с помощью Visual Studio
Откройте файл 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.
Откройте файл 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
Откройте файл web.config в разделе WebAPIOBO. Измените следующее:
ida: AdfsMetadataEndpoint — введите https://[имя узла AD FS]/federationmetadata/2007-06/federationmetadata.xml
ida:Audience — введите значение идентификатора клиента из #12 в разделе "Регистрация приложений" в разделе AD FS выше
Тестирование примера
В этом разделе показано, как протестировать пример, настроенный выше.
После внесения изменений в код выполни пересборку решения
В Visual Studio щелкните правой кнопкой мыши решение и выберите " Задать начальные проекты" ...
На страницах свойств убедитесь, что для каждого проекта, кроме TodoListSPA, параметр Действие установлен на Начать.
В верхней части Visual Studio щелкните зеленую стрелку.
На главном экране собственного приложения нажмите кнопку "Войти".
Если экран собственного приложения не отображается, выполните поиск и удаление *msalcache.bin файлов из папки, в которой репозиторий проекта сохраняется в вашей системе.
Вы будете перенаправляться на страницу входа AD FS. Go ahead and sign in.
После входа в систему введите текст Web Api в поле вызова Web Api в элементе «Создать задание». Нажмите кнопку "Добавить элемент". Это вызовет веб-API (Служба списка дел), которое затем вызывает веб-API 2 (WebAPIOBO) и добавляет элемент в кэш.