Фон
Мы разрабатываем многозадачный продукт 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 в контексте приложения, а не пользователя?