Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья содержит общие сведения о том, что представляет собой account
на платформе идентификаций Microsoft.
В API библиотеки проверки подлинности Microsoft Authentication Library (MSAL) термин пользователь заменен термином учетная запись. Одна из причин заключается в том, что пользователь (человек или программный агент) может иметь или использовать несколько учетных записей. Эти учетные записи могут находиться в организации пользователя и (или) в других организациях, членом которых он является.
Учетная запись на платформе удостоверений Майкрософт состоит из перечисленных ниже компонентов.
- Уникальный идентификатор.
- Один или несколько элементов учетных данных, используемые для подтверждения владения учетной записи и контроля над ней.
- Один или несколько профилей, состоящих из таких атрибутов, как:
- Фотография, имя, фамилия, должность, офисное местоположение.
- Учетная запись имеет источник полномочий или систему записи. Это система, в которой создана эта учетная запись и в которой хранятся связанные с ней учетные данные. В многопользовательских системах, таких как платформа удостоверений Майкрософт, система записи — это
tenant
, где была создана учетная запись. Этот арендатор также называетсяhome tenant
. - Учетные записи в платформа удостоверений Майкрософт имеют следующие системы записей:
- Microsoft Entra ID, включая Azure Active Directory B2C.
- Учетная запись Майкрософт (Live).
- Учетные записи из систем учета за пределами платформы идентификации Microsoft представлены в платформе идентификации Microsoft, включая:
- идентификаторы из подключенных локальных каталогов (Windows Server Active Directory)
- внешние удостоверения из LinkedIn, GitHub и т. д. В таких случаях у учетной записи есть как исходная система записи, так и система записи на платформе удостоверений Майкрософт.
- Платформа удостоверений Майкрософт позволяет использовать одну учетную запись для доступа к ресурсам, принадлежащим нескольким организациям (клиентам Microsoft Entra).
- Чтобы записать, что учетная запись из одной системы записей (клиент Microsoft Entra A) имеет доступ к ресурсу в другой системе записей (клиент Microsoft Entra B), учетная запись должна быть представлена в клиенте, где определен ресурс. Для этого в системе Б создается локальная запись учетной записи из системы А.
- Эта локальная запись, которая является представлением исходной учетной записи, привязана к ней.
- MSAL предоставляет эту локальную запись в виде
Tenant Profile
. - Профиль арендатора может иметь различные атрибуты, соответствующие локальному контексту, например должность, расположение офиса, контактные данные и так далее.
- Поскольку учетная запись может присутствовать в одном или нескольких арендаторах, у нее может быть несколько профилей.
Примечание.
MSAL рассматривает систему учетных записей Microsoft (например, Live, MSA) как отдельного арендатора в платформе удостоверений Microsoft. Идентификатор арендатора учетной записи Майкрософт — 9188040d-6c67-4c5b-b112-36a304b66dad
.
Обзорная схема учетных записей
На диаграмме выше:
- Учетная запись
bob@contoso.com
создается в локальной системе Windows Server Active Directory (исходная локальная система записи). - Учетная запись
tom@live.com
создается в клиенте учетных записей Майкрософт. -
bob@contoso.com
имеет доступ по крайней мере к одному ресурсу в следующих клиентах Microsoft Entra:- contoso.com (облачная система записи, связанная с локальной системой записи)
- fabrikam.com
- woodgrovebank.com
- В каждом из этих арендаторов есть профиль арендатора для
bob@contoso.com
.
-
tom@live.com
имеет доступ к ресурсам в следующих клиентах Майкрософт:- contoso.com
- fabrikam.com
- В каждом из этих арендаторов есть профиль арендатора для
tom@live.com
.
- Сведения о Томе и Бобе в системах других арендаторов могут отличаться от данных в учетной системе. У них могут быть разные атрибуты, такие как должность, место работы и т. д. Они могут быть членами групп и (или) ролей в каждой организации (клиент Microsoft Entra). Мы будем называть эти сведения профилем арендатора bob@contoso.com.
На схеме bob@contoso.com и tom@live.com имеют доступ к ресурсам в различных экземплярах Microsoft Entra. Дополнительные сведения см. в разделе "Добавление пользователей совместной работы Microsoft Entra B2B" в портал Azure.
Учетные записи и единый вход (SSO)
В кэше маркеров MSAL хранится один маркер обновления для каждой учетной записи. Этот маркер обновления можно использовать для запроса токенов доступа в фоновом режиме для нескольких организаций на платформе идентификации Microsoft. Если на устройстве установлен брокер, учетная запись управляется этим брокером и становится возможным единый вход на уровне устройства.
Внимание
Поведение учетной записи и маркера обновления для B2C отличается от остальных элементов платформы идентификаций Майкрософт. Дополнительные сведения см. в статье о политиках и учетных записях B2C.
Идентификаторы учетных записей
Идентификатор учетной записи MSAL не является идентификатором объекта учетной записи. Он не предназначен для разбора и/или использования для чего-либо, кроме обеспечения уникальности в платформе идентификации Майкрософт.
MSAL может искать учетные записи с помощью любого допустимого идентификатора учетной записи, доступной в кэше MSAL. Например, следующий код будет извлекать для tom@live.com один и тот же объект учетной записи, так как каждый из идентификаторов является допустимым:
// The following would always retrieve the same account object for tom@live.com because each identifier is valid
IAccount account = app.getAccount("<tome@live.com msal account id>");
IAccount account = app.getAccount("<tom@live.com contoso user object id>");
IAccount account = app.getAccount("<tom@live.com woodgrovebank user object id>");
Доступ к утверждениям об учетной записи
Помимо запроса токена доступа, MSAL также всегда запрашивает ID токен у каждого арендатора. Для этого запрашиваются следующие области доступа.
- openID
- профиль
Маркер идентификации содержит список утверждений.
Claims
— это пары "имя-значение" для учетной записи, которые используются для выполнения запроса.
Как уже упоминалось выше, каждый арендатор, в котором существует учетная запись, может хранить о ней разные сведения, в том числе, помимо прочего, такие атрибуты, как должность, место работы и т. д.
Хотя учетная запись может быть членом или гостем нескольких организаций, MSAL не запрашивает у службы список арендаторов, членом которых она является. Вместо этого MSAL создает список арендаторов, в которых присутствует учетная запись, в результате сделанных запросов токенов.
Утверждения, представленные в объекте учетной записи, всегда относятся к утверждениям от «основного арендатора»/ {authority} для учетной записи. Если соответствующая учетная запись не использовалась для запроса токена домашнего арендатора, MSAL не может предоставить данные через объект учетной записи. Например:
// Pseudo Code
IAccount account = getAccount("accountid");
String username = account.getClaims().get("preferred_username");
String tenantId = account.getClaims().get("tid"); // tenant id
String objectId = account.getClaims().get("oid"); // object id
String issuer = account.getClaims().get("iss"); // The tenant specific authority that issued the id_token
Совет
Чтобы просмотреть список утверждений, доступных из объекта учетной записи, см . справочник по утверждениям маркера идентификатора.
Совет
Чтобы включить дополнительные утверждения в id_token, ознакомьтесь с необязательной документацией по утверждениям в руководстве. Предоставление дополнительных утверждений приложению Microsoft Entra
Доступ к утверждениям профиля арендатора
Для доступа к утверждениям учетной записи, доступным в других арендаторах, сначала необходимо привести объект учетной записи к типу IMultiTenantAccount
. Все учетные записи могут быть мультитенантными, однако количество профилей арендаторов, доступных через MSAL, зависит от того, у каких арендаторов были запрошены маркеры с использованием текущей учетной записи. Например:
// Pseudo Code
IAccount account = getAccount("accountid");
IMultiTenantAccount multiTenantAccount = (IMultiTenantAccount)account;
multiTenantAccount.getTenantProfiles().get("tenantid for fabrikam").getClaims().get("family_name");
multiTenantAccount.getTenantProfiles().get("tenantid for contoso").getClaims().get("family_name");
Политики и учетные записи B2C
Маркеры обновления учетной записи не являются общими для политик B2C. Вследствие этого единый вход на основе маркеров невозможен. Это не значит, что единый вход невозможен в принципе, Это означает, что для единого входа необходимо использовать интерактивный процесс, в котором файлы cookie доступны для его осуществления.
Это также означает, что в случае MSAL при получении маркеров с использованием разных политик B2C они рассматриваются как отдельные учетные записи — каждая с собственным идентификатором. Если вы хотите использовать учетную запись для запроса маркера с помощью acquireTokenSilent
, вам потребуется выбрать ее из списка учетных записей для политики, которую вы используете в своем запросе маркера. Например:
// Get Account For Policy
String policyId = "SignIn";
IAccount signInPolicyAccount = getAccountForPolicyId(app, policyId);
private IAccount getAccountForPolicy(IPublicClientApplication app, String policyId)
{
List<IAccount> accounts = app.getAccounts();
foreach(IAccount account : accounts)
{
if (account.getClaims().get("tfp").equals(policyId))
{
return account;
}
}
return null;
}