Получить некоторый идентификатор клиента при входе во внешнюю учетную запись (учетная запись Microsoft) - PullRequest
0 голосов
/ 06 ноября 2019

Я создаю веб-приложение SaaS, которое должно иметь возможность принимать пользователей из нескольких Azure AD и внешних пользователей (обычно учетных записей Microsoft). Я создал пример и попытался увидеть, что я могу получить из токена доступа.

Образец состоит из одного клиентского приложения (.js), которое использует библиотеку MSAL для обработки аутентификации, и двух API, которые имеют защищенные конечные точки. Я также создал три отдельных приложения Azure AD AlanClient, AlanAPI1, AlanAPI2. И AlanAPI1, и AlanAPI2 имеют доступ к API (открыть раздел API в приложении портала Azure) и указали одного потребителя AlanClient. AlanClient имеет разрешение на оба API. Все приложения зарегистрированы в "accessTokenAcceptedVersion": 2 и "signInAudience": "AzureADandPersonalMicrosoftAccount".

. У меня есть несколько случаев, которые я хочу охватить, и насколько я тестировал, когда входил в учетную запись outlook, которая определена как внешний пользователь в Azure AD (и Azure AD, где приложение изначально зарегистрировано, и Azure AD, который является еще одним «арендатором») Я не получаю никакой информации (в токене) об арендаторе, на котором зарегистрирована эта учетная запись.

Позвольте мне объяснить. Я надеялся на что-то вроде этого

"tid": "value of Azure AD tenant where this account is registered as external user" - Если эта учетная запись зарегистрирована как внешний пользователь в нескольких арендаторах, которые используют это приложение, я буду ожидать массив арендаторов или что-то вроде этого.

Вместо этогоНасколько я знаю, я получаю

"tid": "9188040d-6c67-4c5b-b112-36a304b66dad", что является значением «арендатора учетной записи Microsoft Presonal».

РЕДАКТИРОВАТЬ:

Благодаря ответу juunas в моем клиентском приложении я изменилКонфигурация MSAL authority с authority: 'https://login.microsoftonline.com/common' до authority: 'https://login.microsoftonline.com/organizations', а также обновленное значение манифеста signInAudience с AzureADMultipleOrgs. Теперь у меня есть ситуация, когда у меня есть Azure AD с именем «A», и в этом Azure AD зарегистрированы мои приложения. Арендатор A имеет внешнего пользователя с именем alan.p365@outlook.com, и это сработало нормально. Я могу войти в систему с этой учетной записью, и я получаю значение параметра tid, указанное арендатором A. Когда я пытаюсь сделать это с арендатором B, у которого в качестве внешнего пользователя есть lovro.p365@outlook.com, это не удалось с сообщением

AADSTS50020 : Учетная запись пользователя «lovro.p365 @ ...» от поставщика удостоверений «live.com» не существует в клиенте «A» и не может получить доступ к приложению AlanClient в этом клиенте. Сначала необходимо добавить учетную запись в качестве внешнего пользователя в клиенте. Выйдите и снова войдите в систему с другой учетной записью пользователя Azure AD.

Просто чтобы уточнить, я успешно подписался с администратором клиента арендатора B, и у арендатора B есть эти приложения в списке приложений Enterprise.

Пример проекта GitHub: https://github.com/alan994/AzureADTest

Есть еще один вопрос по этому поводу, но вывод заключается в том, что это не поддерживается ни с чем, кроме общей конечной точки в (v2.0)

1 Ответ

1 голос
/ 06 ноября 2019

Если вы хотите использовать учетные записи Microsoft, существующие в клиентах AAD, вы должны использовать конечную точку организации вместо общей конечной точки.

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

Разрешая личные учетные записи, вы разрешаете их прямое использование с идентификатором арендатора, который является общим для всех них.

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