Соединение Azure AD OpenID - группы не отображаются в токене - PullRequest
0 голосов
/ 28 ноября 2018

Мы хотели бы подключить наше приложение Angular к интерфейсу Azure AD.Мы начали тестировать это в следующем примере проекта: https://blogs.msdn.microsoft.com/premier_developer/2018/10/24/using-adal-js-with-angular4/#

В файле app.module.ts мы предоставили конфигурацию Azure AD, как показано ниже.

{
  provide: APP_CONFIG, useValue: { 
    clientId: '<our-client-id>',
    tenantId: '<our-app-id>',
    redirectUri: 'http://localhost:4200/frameredirect',
  }
}

ВНа портале Azure мы создали регистрацию приложения и настроили URL перенаправления в соответствии с вышеприведенным.В соответствии с информацией, указанной в https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens, мы также должны настроить манифест приложения на портале Azure, чтобы группы пользователей были включены в токен.Таким образом, в Minifest мы установили для groupMembershipClaims значение SecurityGroup.Теперь все организационные группы должны быть включены в токен.Если есть много ролей, то мы должны увидеть конечную точку, где мы можем запросить группы.Что-то вроде:

"src1" : { "endpoint" : 
"https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects" }

После настройки логин работает.Однако группы пользователей вообще не включены в токен доступа.Кто-нибудь знает, чего нам не хватает?

1 Ответ

0 голосов
/ 28 ноября 2018

Как вы упоминаете в комментариях, вошедший в систему пользователь является участником более 6 групп.В таких случаях вы не получите запрос groups со всеми идентификаторами групп, а вместо этого Azure AD вернет индикатор превышения, который дает вам понять, что пользователь является участником многих групп. Документы Microsoft

заявка на группы

В случае SPA, использующего неявный поток грантов OAuth 2.0, используется показатель превышения hasgroups,Причина этого заключается в том, чтобы убедиться, что фрагмент URI не выходит за пределы длины URL.Таким образом, если пользователь входит в до 5 групп, длина не является проблемой, и вы получаете фактические идентификаторы группы.В случае 6 или более вам нужно сделать отдельный вызов, используя Graph API для получения групп.

enter image description here

groups: утверждение src1

Заявка groups:src1 также является индикатором превышения, но этот дает немного больше информации о том, какую конечную точку вызывать для получения групп.Я видел это утверждение, когда ограничения, связанные с длиной URL, были неприменимы, например, если вместо Angular SPA вы, например, использовали консольное приложение на основе .NET с библиотеками ADAL.NET.Снова то же самое намерение, чтобы вы знали, что пользователь является частью многих групп, и вам нужно сделать отдельный звонок, чтобы получить эту информацию.

enter image description here

Как получить информацию о группах для пользователя?

  1. Поскольку в документации для hasgroups упоминается само заявление, вы можете позвонить в Azure AD Graph API *

    https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects
    
  2. Вы также можете использовать более новый Microsoft Graph API.Это более новый и рекомендуемый.Вы можете прочитать о сравнении с API-интерфейсом Azure AD Graph и о том, когда его использовать, здесь Microsoft Graph или Azure AD Graph

    Я вижу, что стабильная версия v1.0имеет по крайней мере два API, которые могут быть вам полезны:

    Список memberOf

    GET /users/{id | userPrincipalName}/memberOf
    

    user: getMemberGroups

    POST /users/{id | userPrincipalName}/getMemberGroups
    

    Проверка этого API является транзитивной, в отличие от чтения свойства навигации memberOf, которое возвращает только те группы, непосредственным членом которых является пользователь.Он поддерживает Office 365 и другие типы групп, предоставляемые в Azure AD.Максимальное количество групп, которое может вернуть каждый запрос, составляет 2046

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