Arquivo de configuração da Biblioteca de Autenticação da Microsoft no Android

A MSAL (Biblioteca de Autenticação da Microsoft) do Android é fornecida com um arquivo JSON de configuração padrão que você personaliza para definir o comportamento do seu aplicativo cliente público para coisas como a autoridade padrão, quais autoridades você usará e assim por diante.

Este artigo o ajudará a entender as várias configurações no arquivo de configuração e a especificar o arquivo de configuração a ser usado em seu aplicativo baseado na MSAL.

Definições de configuração

Configurações gerais

Propriedade Tipo de Dados Obrigatório Observações
client_id String Sim A ID do cliente do seu aplicativo da Página de registro do aplicativo
redirect_uri String Sim O URI de Redirecionamento do aplicativo da Página de registro do aplicativo
broker_redirect_uri_registered Boolean Não Valores possíveis: true, false
authorities Lista <Autoridades> Não A lista de autoridades que seu aplicativo precisa
authorization_user_agent AuthorizationAgent (enumeração) Não Valores possíveis: WEBVIEW, BROWSER
http HttpConfiguration Não Configure HttpUrlConnectionconnect_timeout e read_timeout
logging LoggingConfiguration Não Especifique o nível de detalhes de log. As configurações opcionais incluem: pii_enabled, que usa um valor booliano e log_level, que usa ERROR, WARNING, INFO ou VERBOSE.

client_id

A ID do cliente ou a ID do aplicativo que foi criada quando você registrou seu aplicativo.

redirect_uri

O URI de redirecionamento que você registrou quando registrou seu aplicativo. Se o URI de redirecionamento for para um aplicativo de agente, confira URI de redirecionamento para aplicativos cliente públicos para garantir que você esteja usando o formato de URI de redirecionamento correto para seu aplicativo de agente.

broker_redirect_uri_registered

Se você quiser usar a autenticação agenciada, a propriedade broker_redirect_uri_registered deverá ser definida como true. Em um cenário de autenticação orientada, se o aplicativo não estiver no formato correto para se comunicar com o agente conforme descrito em URI de redirecionamento para aplicativos cliente públicos, o aplicativo validará o URI de redirecionamento e lançará uma exceção quando ele for iniciado.

autoridades

A lista de autoridades que são conhecidas e nas quais você confia. Além das autoridades listadas aqui, o MSAL também consulta a Microsoft para obter uma lista de nuvens e autoridades conhecidas da Microsoft. Nessa lista de autoridades, especifique o tipo da autoridade e quaisquer parâmetros opcionais adicionais, como "audience", que devem ser alinhados com o público do seu aplicativo com base no registro do aplicativo. Esta é uma lista de exemplos de autoridades:

// Example AzureAD and Personal Microsoft Account
{
    "type": "AAD",
    "audience": {
        "type": "AzureADandPersonalMicrosoftAccount"
    },
    "default": true // Indicates that this is the default to use if not provided as part of the acquireToken call
},
// Example AzureAD My Organization
{
    "type": "AAD",
    "audience": {
        "type": "AzureADMyOrg",
        "tenant_id": "contoso.com" // Provide your specific tenant ID here
    }
},
// Example AzureAD Multiple Organizations
{
    "type": "AAD",
    "audience": {
        "type": "AzureADMultipleOrgs"
    }
},
//Example PersonalMicrosoftAccount
{
    "type": "AAD",
    "audience": {
        "type": "PersonalMicrosoftAccount"
    }
}

Mapear a autoridade e o público-alvo do Microsoft Entra para pontos de extremidade da plataforma de identidade da Microsoft

Tipo Público ID do locatário Authority_Url Ponto de extremidade resultante Observações
ID do Microsoft Entra AzureADandPersonalMicrosoftAccount https://login.microsoftonline.com/common common é um alias de locatário para onde a conta está. Como um locatário do Microsoft Entra específico ou o sistema de contas da Microsoft.
ID do Microsoft Entra AzureADMyOrg contoso.com https://login.microsoftonline.com/contoso.com Somente as contas presentes no contoso.com podem adquirir um token. Qualquer domínio verificado, ou o GUID do locatário, pode ser usado como a ID do locatário.
ID do Microsoft Entra AzureADMultipleOrgs https://login.microsoftonline.com/organizations Somente as contas do Microsoft Entra podem ser usadas com esse ponto de extremidade. As contas da Microsoft podem ser membros de organizações. Para adquirir um token usando um conta da Microsoft para um recurso em uma organização, especifique o locatário organizacional do qual você deseja o token.
ID do Microsoft Entra PersonalMicrosoftAccount https://login.microsoftonline.com/consumers Somente contas da Microsoft podem usar esse ponto de extremidade.
B2C Consultar o ponto de extremidade resultante https://login.microsoftonline.com/tfp/contoso.onmicrosoft.com/B2C_1_SISOPolicy/ Somente as contas presentes no locatário contoso.onmicrosoft.com podem adquirir um token. Neste exemplo, a política B2C faz parte do caminho da URL da Autoridade.

Observação

A validação de autoridade não pode ser habilitada e desabilitada em MSAL. As autoridades são conhecidas por você como o desenvolvedor conforme especificado por meio da configuração ou são conhecidas pela Microsoft por meio de metadados. Se a MSAL receber uma solicitação de um token para uma autoridade desconhecida, um MsalClientException dos resultados do tipo UnknownAuthority. A autenticação orientada não funciona para Azure AD B2C.

Propriedades da autoridade

Propriedade Tipo de dados Obrigatório Observações
type String Sim Espelha o tipo de conta ou público ao qual seu aplicativo se destina. Valores possíveis: AAD, B2C
audience Objeto Não Aplica-se somente quando type=AAD. Especifica a identidade de destino do seu aplicativo. Usar o valor do registro do aplicativo
authority_url String Sim Necessário somente quando type=B2C. Opcional para type=AAD. Especifica a URL ou a política de autoridade que seu aplicativo deve usar
default booleano Sim Um único "default":true é necessário quando uma ou mais autoridades são especificadas.

Propriedades do Público

Propriedade Tipo de Dados Obrigatório Observações
type String Sim Especifica o público-alvo que seu aplicativo deseja direcionar. Valores possíveis: AzureADandPersonalMicrosoftAccount, PersonalMicrosoftAccount, AzureADMultipleOrgs, AzureADMyOrg
tenant_id String Sim Necessário somente quando "type":"AzureADMyOrg". Opcional para outros valores type. Pode ser um domínio de locatário, como contoso.com, ou uma ID de locatário, como 00001111-aaaa-2222-bbbb-3333cccc4444

authorization_user_agent

Indica se deve ser usado um modo de exibição da Web inserido ou o navegador padrão no dispositivo, ao entrar em uma conta ou autorizar o acesso a um recurso.

Valores possíveis:

  • WEBVIEW: usa o modo de exibição da Web inserido.
  • BROWSER: usa o navegador padrão no dispositivo.

multiple_clouds_supported

Para clientes que dão suporte a várias nuvens nacionais, especifique true. A plataforma de identidade da Microsoft será redirecionada automaticamente para a nuvem nacional correta durante a autorização e o resgate de token. Determine a nuvem nacional da conta conectada examinando a autoridade associada ao AuthenticationResult. Observe que o AuthenticationResult não fornece o endereço de ponto de extremidade específico da nuvem nacional do recurso para o qual você solicita um token.

broker_redirect_uri_registered

Um booliano que indica se você está usando um URI de redirecionamento no agente compatível com o agente de Identidade da Microsoft. Defina como false se você não quiser usar o agente em seu aplicativo.

Se você estiver usando a Autoridade do Microsoft Entra com o público definido como "MicrosoftPersonalAccount", o agente não será usado.

http

Defina configurações globais para tempos limite de HTTP, como:

Propriedade Tipo de dados Obrigatório Observações
connect_timeout INT Não Tempo em milissegundos
read_timeout int Não Tempo em milissegundos

registro em log

As seguintes configurações globais são para registro em log:

Propriedade Tipo de Dados Obrigatório Observações
pii_enabled booleano Não Se os dados pessoais devem ser emitidos
log_level Cadeia de caracteres No Quais mensagens de log gerar. Os níveis de log com suporte incluem ERROR, WARNING, INFO e VERBOSE.
logcat_enabled booleano Não Se gerar uma saída para categorias de log além da interface de log deve ser gerada

account_mode

Especifica quantas contas podem ser usadas no seu aplicativo ao mesmo tempo. Os valores possíveis são:

  • MULTIPLE (Padrão)
  • SINGLE

Construir um PublicClientApplication usando um modo de conta que não corresponda a essa configuração resultará em uma exceção.

Para saber mais sobre as diferenças entre contas únicas e múltiplas, confira Aplicativos de conta única e múltipla.

browser_safelist

Uma lista de permissões de navegadores compatíveis com o MSAL. Esses navegadores gerenciam corretamente os redirecionamentos para intenções personalizadas. Você pode adicionar a essa lista. O padrão é fornecido na configuração padrão mostrada abaixo. ``

O arquivo de configuração da MSAL padrão

A configuração padrão da MSAL fornecida com a MSAL é mostrada abaixo. Você pode ver a versão mais recente no GitHub.

Essa configuração é complementada por valores que você fornece. Os valores que você fornece substituem os padrões.

{
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount"
      },
      "default": true
    }
  ],
  "authorization_user_agent": "DEFAULT",
  "multiple_clouds_supported": false,
  "broker_redirect_uri_registered": false,
  "http": {
    "connect_timeout": 10000,
    "read_timeout": 30000
  },
  "logging": {
    "pii_enabled": false,
    "log_level": "WARNING",
    "logcat_enabled": false
  },
  "shared_device_mode_supported": false,
  "account_mode": "MULTIPLE",
  "browser_safelist": [
    {
      "browser_package_name": "com.android.chrome",
      "browser_signature_hashes": [
        "7fmduHKTdHHrlMvldlEqAIlSfii1tl35bxj1OXN5Ve8c4lU6URVu4xtSHc3BVZxS6WWJnxMDhIfQN0N0K2NDJg=="
      ],
      "browser_use_customTab" : true,
      "browser_version_lower_bound": "45"
    },
    {
      "browser_package_name": "com.android.chrome",
      "browser_signature_hashes": [
        "7fmduHKTdHHrlMvldlEqAIlSfii1tl35bxj1OXN5Ve8c4lU6URVu4xtSHc3BVZxS6WWJnxMDhIfQN0N0K2NDJg=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "org.mozilla.firefox",
      "browser_signature_hashes": [
        "2gCe6pR_AO_Q2Vu8Iep-4AsiKNnUHQxu0FaDHO_qa178GByKybdT_BuE8_dYk99G5Uvx_gdONXAOO2EaXidpVQ=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "org.mozilla.firefox",
      "browser_signature_hashes": [
        "2gCe6pR_AO_Q2Vu8Iep-4AsiKNnUHQxu0FaDHO_qa178GByKybdT_BuE8_dYk99G5Uvx_gdONXAOO2EaXidpVQ=="
      ],
      "browser_use_customTab" : true,
      "browser_version_lower_bound": "57"
    },
    {
      "browser_package_name": "com.sec.android.app.sbrowser",
      "browser_signature_hashes": [
        "ABi2fbt8vkzj7SJ8aD5jc4xJFTDFntdkMrYXL3itsvqY1QIw-dZozdop5rgKNxjbrQAd5nntAGpgh9w84O1Xgg=="
      ],
      "browser_use_customTab" : true,
      "browser_version_lower_bound": "4.0"
    },
    {
      "browser_package_name": "com.sec.android.app.sbrowser",
      "browser_signature_hashes": [
        "ABi2fbt8vkzj7SJ8aD5jc4xJFTDFntdkMrYXL3itsvqY1QIw-dZozdop5rgKNxjbrQAd5nntAGpgh9w84O1Xgg=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "com.cloudmosa.puffinFree",
      "browser_signature_hashes": [
        "1WqG8SoK2WvE4NTYgr2550TRhjhxT-7DWxu6C_o6GrOLK6xzG67Hq7GCGDjkAFRCOChlo2XUUglLRAYu3Mn8Ag=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "com.duckduckgo.mobile.android",
      "browser_signature_hashes": [
        "S5Av4cfEycCvIvKPpKGjyCuAE5gZ8y60-knFfGkAEIZWPr9lU5kA7iOAlSZxaJei08s0ruDvuEzFYlmH-jAi4Q=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "com.explore.web.browser",
      "browser_signature_hashes": [
        "BzDzBVSAwah8f_A0MYJCPOkt0eb7WcIEw6Udn7VLcizjoU3wxAzVisCm6bW7uTs4WpMfBEJYf0nDgzTYvYHCag=="
      ],
      "browser_use_customTab" : false
    },

    {
      "browser_package_name": "com.ksmobile.cb",
      "browser_signature_hashes": [
        "lFDYx1Rwc7_XUn4KlfQk2klXLufRyuGHLa3a7rNjqQMkMaxZueQfxukVTvA7yKKp3Md3XUeeDSWGIZcRy7nouw=="
      ],
      "browser_use_customTab" : false
    },

    {
      "browser_package_name": "com.microsoft.emmx",
      "browser_signature_hashes": [
        "Ivy-Rk6ztai_IudfbyUrSHugzRqAtHWslFvHT0PTvLMsEKLUIgv7ZZbVxygWy_M5mOPpfjZrd3vOx3t-cA6fVQ=="
      ],
      "browser_use_customTab" : false
    },

    {
      "browser_package_name": "com.opera.browser",
      "browser_signature_hashes": [
        "FIJ3IIeqB7V0qHpRNEpYNkhEGA_eJaf7ntca-Oa_6Feev3UkgnpguTNV31JdAmpEFPGNPo0RHqdlU0k-3jWJWw=="
      ],
      "browser_use_customTab" : false
    },

    {
      "browser_package_name": "com.opera.mini.native",
      "browser_signature_hashes": [
        "TOTyHs086iGIEdxrX_24aAewTZxV7Wbi6niS2ZrpPhLkjuZPAh1c3NQ_U4Lx1KdgyhQE4BiS36MIfP6LbmmUYQ=="
      ],
      "browser_use_customTab" : false
    },

    {
      "browser_package_name": "mobi.mgeek.TunnyBrowser",
      "browser_signature_hashes": [
        "RMVoXuK1sfJZuGZ8onG1yhMc-sKiAV2NiB_GZfdNlN8XJ78XEE2wPM6LnQiyltF25GkHiPN2iKQiGwaO2bkyyQ=="
      ],
      "browser_use_customTab" : false
    },

    {
      "browser_package_name": "org.mozilla.focus",
      "browser_signature_hashes": [
        "L72dT-stFqomSY7sYySrgBJ3VYKbipMZapmUXfTZNqOzN_dekT5wdBACJkpz0C6P0yx5EmZ5IciI93Q0hq0oYA=="
      ],
      "browser_use_customTab" : false
    }
  ]
}

Exemplo de configuração básica

O exemplo a seguir ilustra uma configuração básica que especifica a ID do cliente, o URI de redirecionamento, se um redirecionamento do agente está registrado e uma lista de autoridades.

{
  "client_id" : "00001111-aaaa-2222-bbbb-3333cccc4444",
  "redirect_uri" : "msauth://com.microsoft.identity.client.sample.local/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
  "broker_redirect_uri_registered": true,
  "authorities" : [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount"
      }
      "default": true
    }
  ]
}

Como usar um arquivo de configuração

  1. Criar um arquivo de configuração. Recomendamos que você crie seu arquivo de configuração personalizado em res/raw/auth_config.json. Mas você pode colocá-lo em qualquer lugar que desejar.

  2. Informe à MSAL onde procurar sua configuração ao construir o PublicClientApplication. Por exemplo:

    //On Worker Thread
    IMultipleAccountPublicClientApplication sampleApp = null; 
    sampleApp = new PublicClientApplication.createMultipleAccountPublicClientApplication(getApplicationContext(), R.raw.auth_config);