Поделиться через


Учетные записи и профили клиентов (Android)

Эта статья содержит общие сведения о том, что представляет собой 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;
}