Я создаю веб-приложение 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)