Аутентифицировать пользователей для функции Azure, когда пользователь проходит аутентификацию в веб-приложении. - PullRequest
0 голосов
/ 03 июня 2019

У меня есть веб-приложение ASP.NET MVC, работающее как веб-приложение в службе приложений Azure. Это веб-приложение вызывает функцию Azure через HttpClient из контроллера. Аутентификация / авторизация настраивается в веб-приложении с помощью Azure Active Directory. Мне нужно, чтобы пользователь также проходил аутентификацию при вызове функции Azure, чтобы я мог получить доступ к утверждениям пользователя. Я также пытался настроить аутентификацию в самой функции Azure, но это приводило к «неавторизованному ответу» всякий раз, когда я вызывал функцию из своего веб-приложения. Есть ли способ заставить и веб-приложение, и функцию Azure использовать одну и ту же проверку подлинности Active Directory. Чтобы при аутентификации пользователя в веб-приложении ему не нужно снова проходить аутентификацию в функции Azure, и все утверждения пользователя будут доступны в самой функции?

1 Ответ

0 голосов
/ 03 июня 2019

Я могу вспомнить три разных подхода, которые будут работать.

Использование токена на предъявителя.

Создайте две отдельные регистрации приложений, одну для веб-приложения и одну для функционального приложения. Настройте функцию аутентификации / авторизации для соответствующих приложений, для обоих из которых требуется доступ AAD. Дайте разрешение на регистрацию приложения AAD веб-приложения для доступа к регистрации приложения AAD приложения функции.

Чтобы убедиться, что токен доступа вашего веб-приложения - это JWT, который можно использовать для связи с вашим функциональным приложением, вам необходимо добавить дополнительные параметры входа в свое веб-приложение. Для этого следуйте инструкциям здесь , но вместо этого установите additionalLoginParams в resource=<your-function-app-registration-client-id>.

Когда пользователь делает аутентифицированный запрос к веб-приложению, должен быть заполнен заголовок с именем X-MS-TOKEN-AAD-ACCESS-TOKEN, который должен быть токеном доступа для аудитории, зарегистрировавшей приложение вашего приложения-функции. Затем его можно использовать в качестве маркера-носителя для вызовов API приложения-функции, которые должны удовлетворять требованиям аутентификации / авторизации приложения-функции.

Использование потока от имени

Создайте две отдельные регистрации приложений, одну для веб-приложения и одну для функционального приложения. Настройте функцию аутентификации / авторизации для соответствующих приложений, для обоих из которых требуется доступ AAD. Дайте разрешение на регистрацию приложения AAD веб-приложения для доступа к регистрации приложения AAD приложения функции.

Затем выполните от имени потока , чтобы веб-приложение могло получить токен доступа для пользователя, прошедшего проверку подлинности, для приложения-функции. Есть несколько библиотек, которые помогают с этим потоком. См. ADAL , если ваши регистрации приложений являются приложениями AAD V1, или MSAL , если ваши регистрации приложений являются приложениями AAD V2.

Использовать поток, направленный на клиента (X-ZUMO-AUTH)

Создайте две отдельные регистрации приложений, одну для веб-приложения и одну для функционального приложения. Настройте функцию аутентификации / авторизации для соответствующих приложений, для обоих из которых требуется доступ AAD. Дайте разрешение на регистрацию приложения AAD веб-приложения для доступа к регистрации приложения AAD приложения функции.

Чтобы убедиться, что токен доступа вашего веб-приложения можно использовать для аутентификации в вашем функциональном приложении, вам необходимо добавить дополнительные параметры входа в свое веб-приложение. Для этого следуйте инструкциям здесь , но вместо этого установите additionalLoginParams на resource=<your-function-app-registration-client-id>.

Когда пользователь делает аутентифицированный запрос к веб-приложению, должен быть заполнен заголовок с именем X-MS-TOKEN-AAD-ACCESS-TOKEN, который должен быть токеном доступа к аудитории регистрации приложения вашего приложения-функции вместе с токеном id в заголовке X-MS-TOKEN-AAD-ID-TOKEN. Сделайте POST-запрос к https: //.azurewebsites.net/.auth/login/aad с полезной нагрузкой
{"id_token": <id-token>, "access_token": <access-token>}. Это вернет маркер сеанса, который вы можете прикрепить как X-ZUMO-AUTH заголовок для аутентификации запросов.

ПРИМЕЧАНИЕ. Заявки в этом параметре будут утверждениями токена аутентификации, которые не являются утверждениями поставщика удостоверений, как в первых двух вариантах. Чтобы получить те же требования, что и для других параметров, установите для параметра приложения WEBSITE_AUTH_ZUMO_USE_TOKEN_STORE_CLAIMS значение true.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...