Android Microsoft 身份验证库配置文件

Android Microsoft 身份验证库(MSAL)附带了一个默认配置 JSON 文件,用于定义公共客户端应用的行为,例如默认颁发机构、你将使用的权限等。

本文将帮助你了解配置文件中的各种设置,以及如何指定要在基于 MSAL 的应用中使用的配置文件。

配置参数

常规设置

财产 数据类型 必选 备注
client_id String Yes 应用程序注册页中的应用的客户端 ID
redirect_uri String Yes 应用程序注册页中的应用的重定向 URI
broker_redirect_uri_registered 布尔 No 可能的值: truefalse
authorities 列出<颁发机构> No 应用所需的颁发机构列表
authorization_user_agent AuthorizationAgent (枚举) No 可能的值:DEFAULT、、 BROWSERWEBVIEW
http HttpConfiguration No 配置 HttpUrlConnectionconnect_timeoutread_timeout
logging 日志记录配置 No 指定日志记录详细信息级别。 可选配置包括: pii_enabled采用布尔值,以及 log_level采用 ERRORWARNINGINFOVERBOSE

客户编号

注册应用程序时创建的客户端 ID 或应用 ID。

重定向URI

注册应用程序时注册的重定向 URI。 如果重定向 URI 是代理应用,请参阅 公共客户端应用的重定向 URI ,以确保使用代理应用的正确重定向 URI 格式。

broker_redirect_uri_registered

如果要使用中转身份验证,则必须将 broker_redirect_uri_registered 属性设置为 true。 在中转身份验证方案中,如果应用程序的格式不正确,无法按照 公共客户端应用程序的重定向 URI 中所述与中转站通信,则应用程序会验证重定向 URI,并在启动时引发异常。

authorities

已知和信任的颁发机构列表。 除了此处列出的当局外,MSAL 还查询Microsoft获取已知Microsoft云和当局的列表。 在此颁发机构列表中,指定颁发机构的类型和任何其他可选参数,例如 "audience",应根据应用的注册与应用的受众保持一致。 下面是引文示例列表:

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

将Microsoft Entra颁发机构与受众映射到Microsoft 标识平台终结点

类型 受众 租户 ID Authority_Url 生成的终结点 备注
Microsoft Entra ID Azure AD 和个人 Microsoft 帐户 https://login.microsoftonline.com/common common 是帐户所在的租户别名。 例如特定的Microsoft Entra租户或Microsoft 帐户系统。
Microsoft Entra ID AzureADMyOrg contoso.com https://login.microsoftonline.com/contoso.com 只有 contoso.com 中存在的帐户才能获取令牌。 任何已验证的域或租户 GUID 都可用作租户 ID。
Microsoft Entra ID AzureADMultipleOrgs https://login.microsoftonline.com/organizations 只有Microsoft Entra帐户可用于此终结点。 Microsoft帐户可以是组织的成员。 若要使用组织中资源的Microsoft 帐户获取令牌,请指定要从中获取令牌的组织租户。
Microsoft Entra ID 个人 Microsoft 帐户 https://login.microsoftonline.com/consumers 只有Microsoft帐户才能使用此终结点。
B2C 请参阅生成的终结点 https://login.microsoftonline.com/tfp/contoso.onmicrosoft.com/B2C_1_SISOPolicy/ 只有 contoso.onmicrosoft.com 租户中存在的帐户才能获取令牌。 在此示例中,B2C 策略是颁发机构 URL 路径的一部分。

注释

无法在 MSAL 中启用和禁用颁发机构验证。 作为开发人员,颁发机构要么通过配置指定,要么通过元数据Microsoft已知。 如果 MSAL 向未知颁发机构收到令牌请求, MsalClientException 则类型 UnknownAuthority 为结果。 中转身份验证不适用于 Azure AD B2C。

颁发机构属性

财产 数据类型 必选 备注
type String Yes 镜像应用目标受众或帐户类型。 可能的值: AADB2C
audience Object No 仅当 type=AAD时适用。 指定应用目标标识。 使用应用注册中的值
authority_url String Yes 仅当 type=B2C时必需。 type=AAD的可选类型。 指定应用应使用的颁发机构 URL 或策略
default 布尔 Yes 指定一个或多个颁发机构时,需要一 "default":true 个。

访问群体属性

财产 数据类型 必选 备注
type String Yes 指定应用想要面向的受众。 可能的值:AzureADandPersonalMicrosoftAccountPersonalMicrosoftAccountAzureADMultipleOrgsAzureADMyOrg
tenant_id String Yes 仅当 ."type":"AzureADMyOrg" 对于其他 type 值,可选。 这可以是租户域,例如 contoso.com,或租户 ID,例如 aaaabbbb-0000-cccc-1111-dddd2222eeee

authorization_user_agent

指示在登录帐户或授权访问资源时,是使用设备上的嵌入式 Web 视图还是默认浏览器。

可能的值:

  • DEFAULT:首选系统浏览器。 如果设备上没有浏览器,请使用嵌入式 Web 视图。
  • WEBVIEW:使用嵌入式 Web 视图。
  • BROWSER:在设备上使用默认浏览器。

multiple_clouds_supported

对于支持多个国家/地区云的客户端,请指定 true。 然后,在授权和令牌兑换期间,Microsoft 标识平台会自动重定向到正确的国家云。 可以通过检查与 AuthenticationResult登录帐户关联的机构来确定已登录帐户的国家云。 请注意,该 AuthenticationResult 地址不提供为其请求令牌的资源的国家云特定终结点地址。

broker_redirect_uri_registered

一个布尔值,指示是否使用与代理内重定向 URI 兼容的Microsoft标识代理。 如果不想在应用中使用中转站,请设置为 false

如果使用设置为“受众”"MicrosoftPersonalAccount"的Microsoft Entra颁发机构,则不会使用中转站。

http

为 HTTP 超时配置全局设置,例如:

财产 数据类型 必选 备注
connect_timeout int No 时间(以毫秒为单位)
read_timeout int No 时间(以毫秒为单位)

记录

以下全局设置用于日志记录:

财产 数据类型 必选 备注
pii_enabled 布尔 No 是否发出个人数据
log_level 字符串 No 要输出哪些日志消息。 支持的日志级别包括ERRORWARNINGINFOVERBOSE
logcat_enabled 布尔 No 是否输出到记录 cat 以及日志记录接口

account_mode

指定一次可在应用中使用多少个帐户。 可能的值为:

  • MULTIPLE (默认)
  • SINGLE

PublicClientApplication使用与此设置不匹配的帐户模式构造将导致异常。

有关单帐户和多个帐户之间的差异的详细信息,请参阅 单帐户和多个帐户应用

browser_safelist

与 MSAL 兼容的浏览器的允许列表。 这些浏览器正确处理到自定义意向的重定向。 可以添加到此列表。 默认配置如下所示。 ``

默认 MSAL 配置文件

MSAL 附带的默认 MSAL 配置如下所示。 可以在GitHub上查看最新版本。

此配置由你提供的值进行补充。 提供的值将替代默认值。

{
  "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": [
        "7fmdu...2NDJg=="
      ],
      "browser_use_customTab" : true,
      "browser_version_lower_bound": "45"
    },
    {
      "browser_package_name": "com.android.chrome",
      "browser_signature_hashes": [
        "7fmdu...2NDJg=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "org.mozilla.firefox",
      "browser_signature_hashes": [
        "2gCe6...idpVQ=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "org.mozilla.firefox",
      "browser_signature_hashes": [
        "2gCe6...idpVQ=="
      ],
      "browser_use_customTab" : true,
      "browser_version_lower_bound": "57"
    },
    {
      "browser_package_name": "com.sec.android.app.sbrowser",
      "browser_signature_hashes": [
        "ABi2f...4O1Xgg=="
      ],
      "browser_use_customTab" : true,
      "browser_version_lower_bound": "4.0"
    },
    {
      "browser_package_name": "com.sec.android.app.sbrowser",
      "browser_signature_hashes": [
        "ABi2f...O1Xgg=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "com.cloudmosa.puffinFree",
      "browser_signature_hashes": [
        "1WqG8...Mn8Ag=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "com.duckduckgo.mobile.android",
      "browser_signature_hashes": [
        "S5Av4...jAi4Q=="
      ],
      "browser_use_customTab" : false
    },
    {
      "browser_package_name": "com.explore.web.browser",
      "browser_signature_hashes": [
        "BzDzB...YHCag=="
      ],
      "browser_use_customTab" : false
    },

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

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

    {
      "browser_package_name": "com.opera.browser",
      "browser_signature_hashes": [
        "FIJ3I...jWJWw=="
      ],
      "browser_use_customTab" : false
    },

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

    {
      "browser_package_name": "mobi.mgeek.TunnyBrowser",
      "browser_signature_hashes": [
        "RMVoX...bkyyQ=="
      ],
      "browser_use_customTab" : false
    },

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

示例基本配置

以下示例演示了一个基本配置,该配置指定客户端 ID、重定向 URI、是否注册代理重定向以及颁发机构列表。

{
  "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
    }
  ]
}

如何使用配置文件

  1. 创建配置文件。 建议在 . 中 res/raw/auth_config.json创建自定义配置文件。 但你可以把它放在你想要的任何地方。

  2. 在构造 PublicClientApplication配置时,告诉 MSAL 在何处查找配置。 例如:

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