Подтвердить что ты не робот

Групповые претензии с Azure AD и OAuth2 неявным грантом в ADAL JS

Фон

Мы разрабатываем многозадачный продукт SaaS в Azure, который имеет интерфейс Frontline и веб-интерфейс AngularJS. Мы используем Azure AD для аутентификации и подключаем его с помощью ADAL JS (используя неявное предоставление OAuth2). Являясь многопользовательским приложением, мы разрешаем клиентам аутентифицироваться против своего собственного Azure AD (который может или не может быть подключен к локальному AD).

Пока все это хорошо работает. ADAL JS выводит пользователя на страницу входа в Azure и после аутентификации пользователя выдается маркер OAuth2. Этот токен JWT затем отправляется со всеми вызовами API в качестве маркера-носителя, где у нас есть собственный процесс преобразования претензий для сопоставления входящих заявок от Azure с нашими заявками на заявку.

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

Проблема

Получаемый токен JWT не содержит свойства groups, несмотря на то, что он установлен в groupMembershipClaims до SecurityGroup в манифесте приложения AAD. С тех пор я читал в этот твит из Vittorio, который

Неявный грант НЕ отправит эти претензии, поскольку он возвращает токен в querystring - его легко пропустить за максимальную длину

После дальнейшего изучения я также нашел qaru.site/info/551926/..., в котором говорится

Я проверил и в случае неявного разрешения вы будете получать группы всегда через требование о превышении. Пожалуйста, обратитесь к https://github.com/AzureADSamples/WebApp-GroupClaims-DotNet/tree/master/WebApp-GroupClaims-DotNet - он покажет вам, как обрабатывать избыточное требование для извлечения групп.

Я взглянул на токен JWT и не включил никаких претензий к избыточности (обозначенных _claim_names и _claim_sources). Я определенно являюсь членом двух групп в моем Azure AD.

Теперь у меня также есть два противоречивых утверждения о том, можно ли получить групповую информацию (прямо или косвенно) в неявном токене гранта.

Вопрос 1: Должен ли я получить чрезмерное требование, которое я могу использовать для получения информации о группе? Если да, нужно ли мне что-либо сделать, чтобы гарантировать, что запрос будет отправлен мне?

API-интерфейс графика

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

Мне нужно связаться с API-интерфейсом графиков с помощью внешнего сервера после получения запроса с маркером-носителем (из ADAL JS).

Вопрос 2: Могу ли я отправить один и тот же токен-носитель в API-интерфейс графика, чтобы прочитать эту информацию о каталоге пользователя? Или мне нужно выполнить аутентификацию непосредственно из моего приложения в арендатора графического API в контексте приложения, а не пользователя?

4b9b3361

Ответ 1

извинения за путаницу здесь. Я дважды проверю выражение об избыточности, но в любом случае - ради быстрого разблокирования, предположим, что вам нужно получить группы вручную без помощи требования о превышении. Вы не можете повторно использовать маркер, который вы отправляете в свой веб-API. Этот токен привязан к вашему приложению, и любой другой получатель (или должен) отклонить его. Хорошей новостью является то, что поток, через который ваш бэкэнд может запросить новый токен, охваченный графиком, легко реализовать. См. https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet - подробности в вашем случае немного отличаются (ваш веб-API имеет аудиторию == clientid вашего приложения), но топология и задействованные коды/вызовы являются точно такими же. НТН! В.