Compartilhar via


Contas e perfis de locatário (Android)

Este artigo fornece uma visão geral do que é um account na plataforma de identidade da Microsoft.

A API da MSAL (Biblioteca de Autenticação da Microsoft) substitui o termo usuário pelo termo conta. Um motivo é que um usuário (humano ou agente de software) pode ter, ou pode usar, várias contas. Essas contas podem estar na própria organização do usuário e/ou em outras organizações das quais o usuário é membro.

Uma conta na plataforma de identidade da Microsoft consiste em:

  • Um identificador exclusivo.
  • Uma ou mais credenciais usadas para demonstrar a propriedade/controle da conta.
  • Um ou mais perfis que consistem em atributos como:
    • Imagem, nome próprio, sobrenome, cargo, localização do escritório
  • Uma conta tem uma fonte de autoridade ou sistema de registro. Esse é o sistema em que a conta é criada e onde as credenciais associadas a essa conta são armazenadas. Em sistemas multilocatários, como a plataforma de identidade da Microsoft, o sistema de registro é o tenant onde a conta foi criada. Esse locatário também é chamado de home tenant.
  • As contas da plataforma de identidade da Microsoft têm os seguintes sistemas de registro:
    • Microsoft Entra ID, incluindo o Azure Active Directory B2C.
    • Conta Microsoft (Live)
  • As contas de sistemas de registro fora da plataforma de identidade da Microsoft são representadas na plataforma de identidade da Microsoft, incluindo:
    • identidades de diretórios locais conectados (Windows Server Active Directory)
    • identidades externas do LinkedIn, GitHub e assim por diante. Nesses casos, uma conta tem um sistema de origem de registro e um sistema de registro dentro da plataforma de identidade da Microsoft.
  • A plataforma de identidade da Microsoft permite que uma conta seja usada para acessar recursos pertencentes a várias organizações (locatários do Microsoft Entra).
    • Para registrar que uma conta de um sistema de registro (locatário A do Microsoft Entra) tem acesso a um recurso em outro sistema de registro (locatário B do Microsoft Entra), a conta deve ser representada no locatário em que o recurso está definido. Isso é feito criando um registro local da conta do sistema A no sistema B.
    • Esse registro local, que é a representação da conta, está limitado à conta original.
    • A MSAL expõe esse registro local como um Tenant Profile.
    • O perfil do locatário pode ter diferentes atributos que são apropriados para o contexto local, como cargo, localização do escritório, informações de contato etc.
  • Como uma conta pode estar presente em um ou mais locatários, uma conta pode ter mais de um perfil.

Observação

A MSAL trata o sistema de conta Microsoft (Live, MSA) como outro inquilino na plataforma de identidade da Microsoft. A ID do locatário da conta Microsoft é: 9188040d-6c67-4c5b-b112-36a304b66dad

Diagrama de visão geral da conta

Diagrama de visão geral da conta

No diagrama acima:

  • A conta bob@contoso.com é criada no Windows Server Active Directory local (sistema local de origem do registro).
  • A conta tom@live.com é criada no locatário da conta Microsoft.
  • bob@contoso.com tem acesso a pelo menos um recurso nos seguintes locatários do Microsoft Entra:
    • contoso.com (sistema em nuvem de registro - vinculado a um sistema local de registro)
    • fabrikam.com
    • woodgrovebank.com
    • Existe um perfil de locatário para bob@contoso.com em cada um desses locatários.
  • tom@live.com tem acesso aos recursos nos seguintes locatários da Microsoft:
    • contoso.com
    • fabrikam.com
    • Existe um perfil de locatário para tom@live.com em cada um desses locatários.
  • As informações sobre Tom e Bob em outros locatários podem ser diferentes daquelas existentes no sistema de registro. Eles podem diferir por atributos como cargo, local do escritório e assim por diante. Eles podem ser membros de grupos e/ou funções em cada organização (locatário do Microsoft Entra). Chamamos essas informações de perfil de locatário bob@contoso.com.

No diagrama, bob@contoso.com e tom@live.com têm acesso a recursos em diferentes locatários do Microsoft Entra. Para saber mais, veja Adicionar usuários de colaboração B2B do Microsoft Entra no portal do Azure.

Contas e SSO (login único)

O cache de token da MSAL armazena um único token de atualização por conta. Esse token de atualização pode ser usado para solicitar tokens de acesso silenciosamente de vários locatários da plataforma de identidade da Microsoft. Quando um agente é instalado em um dispositivo, a conta é gerenciada pelo agente e um login único em todo o dispositivo se torna possível.

Importante

O comportamento do token de atualização e da conta B2C (entre empresas e consumidor) é diferente do restante da plataforma de identidade da Microsoft. Para obter mais informações, confira Políticas e Contas B2C.

Identificadores de conta

A ID da conta da MSAL não é uma ID do objeto da conta. Não é destinado a ser analisado e/ou usado para transmitir algo além da exclusividade dentro da plataforma de identidade Microsoft.

A MSAL pode pesquisar contas usando qualquer identificador válido para a conta disponível no cache MSAL. Por exemplo, o seguinte sempre recuperará o mesmo objeto de conta para tom@live.com porque cada um dos identificadores é válido:

// 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>");

Acessar declarações sobre uma conta

Além de solicitar um token de acesso, a MSAL também solicita um token de ID de cada locatário. Ela o faz sempre solicitando os seguintes escopos:

  • OpenID
  • perfil

O token de ID contém uma lista de declarações. Claims são pares de nome/valor sobre a conta e são usados para fazer a solicitação.

Conforme mencionado anteriormente, cada locatário em que uma conta existe pode armazenar informações diferentes sobre a conta, incluindo, entre outros, atributos como: cargo, local do escritório e assim por diante.

Embora uma conta possa ser membro ou convidada em várias organizações, a MSAL não consulta um serviço para obter uma lista dos locatários dos quais a conta é membro. Em vez disso, a MSAL cria uma lista de locatários em que a conta está presente, como resultado de solicitações de token que foram feitas.

As declarações expostas no objeto da conta são sempre as declarações do "locatário inicial"/{autoridade} para uma conta. Se essa conta não tiver sido usada para solicitar um token para seu locatário inicial, a MSAL não poderá fornecer declarações por meio do objeto da conta. Por exemplo:

// 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

Dica

Para ver uma lista de declarações disponíveis no objeto da conta, consulte Referência de declarações de token de ID.

Dica

Para incluir declarações adicionais em seu id_token, consulte a documentação de declarações opcionais em Como fornecer declarações opcionais para seu aplicativo do Microsoft Entra

Acessar declarações do perfil de locatário

Para acessar declarações sobre uma conta conforme aparecem em outros locatários, primeiro, você precisa converter seu objeto de conta em IMultiTenantAccount. Todas as contas podem ser multilocatário, mas o número de perfis de locatário disponíveis via MSAL é baseado em quais locatários você solicitou tokens usando a conta atual. Por exemplo:

// 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");

Políticas e Contas B2C

Os tokens de atualização para uma conta não são compartilhados entre as políticas B2C. Como resultado, não é possível um logon único usando tokens. Isso não significa que seja impossível fazer um logon único. Isso significa que o logon único precisa usar uma experiência interativa na qual um cookie está disponível para habilitar um logon único.

Isso também significa que, no caso da MSAL, se você adquirir tokens usando políticas B2C diferentes, eles serão tratados como contas separadas, cada um com seu próprio identificador. Se quiser usar uma conta para solicitar um token usando acquireTokenSilent, você precisará selecionar a conta na lista de contas que corresponde à política que você está usando com a solicitação de token. Por exemplo:

// 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;
}