Android Microsoft 驗證資源庫 設定檔

Android Microsoft 驗證資源庫(MSAL)附帶一個預設的設定 JSON 檔案,你可以自訂它來定義公共客戶端應用程式的行為,例如預設權限、使用權限等。

本文將幫助你了解設定檔中的各種設定,以及如何指定該設定檔用於你的 MSAL 應用程式。

組態設定

一般設定

房產 數據類型 必要 Notes
client_id String Yes 你應用程式的客戶 ID 來自 應用程式註冊頁面
redirect_uri String Yes 您的應用程式從申請註冊頁面重新導向 URI
broker_redirect_uri_registered 布林值 No 可能的值: truefalse
authorities 名單<權威> No 你的應用程式需要的權限清單
authorization_user_agent 授權代理(列舉) No 可能的值:DEFAULT、、 BROWSERWEBVIEW
http HttpConfiguration No 配置 HttpUrlConnectionconnect_timeoutread_timeout
logging 日誌記錄配置 No 指定記錄細節層級。 可選配置包括:pii_enabled,取布林值,及log_level,取 ERRORWARNINGINFOVERBOSE、 或 。

client_id (客戶識別碼)

就是你註冊應用程式時建立的客戶 ID 或應用程式 ID。

重定向網址 (redirect_uri)

你註冊申請時註冊的重定向 URI。 如果重定向 URI 是指向經紀商應用程式,請參考公開 客戶端應用程式的重定向 URI ,以確保你使用的是正確的重定向 URI 格式。

broker_redirect_uri_registered

如果你想使用經紀驗證, broker_redirect_uri_registered 屬性必須設定為 true。 在經紀式認證情境中,如果應用程式格式不正確,無法像公開 客戶端應用程式的 Redirect 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 身分識別平台 endpoints

類型 觀眾 租戶識別碼 Authority_Url 結果終點 Notes
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 路徑的一部分。

Note

權限驗證在 MSAL 中無法啟用或停用。 權威機構要麼是你透過設定指定的開發者,要麼是透過元資料對 Microsoft 來說是認識的。 如果 MSAL 收到一個未知權威的令牌請求,會產生 一個 MsalClientException 型別 UnknownAuthority 。 經紀認證在 Azure AD B2C 上無法運作。

權威屬性

房產 資料類型 必要 Notes
type String Yes 鏡像你的應用程式目標受眾或帳號類型。 可能的值: AADB2C
audience Object No 僅在類型=AAD時適用。 指定你的應用程式所鎖定的身份。 使用你應用程式註冊的數值
authority_url String Yes 僅在類型=B2C時才需要。 類型=AAD可選。 指定你的應用程式應該使用的權威網址或政策
default 布林值 Yes 當指定一個或多個權威時,則需提供單一 "default":true 授權。

觀眾資產

房產 數據類型 必要 Notes
type String Yes 指定你的應用程式想要鎖定的受眾。 可能的值:AzureADandPersonalMicrosoftAccount、、PersonalMicrosoftAccountAzureADMultipleOrgsAzureADMyOrg
tenant_id String Yes 僅在 "type":"AzureADMyOrg"時才需要。 其他 type 價值則可選。 這可以是租戶網域,例如 contoso.com,或租戶識別碼,例如 aaaabbbb-0000-cccc-1111-dddd2222eeee

authorization_user_agent

指示登入帳號或授權存取資源時,應使用嵌入式網頁檢視或裝置預設瀏覽器。

可能的值:

  • DEFAULT: 偏好系統瀏覽器。 如果裝置上沒有瀏覽器,會使用內嵌的網頁檢視。
  • WEBVIEW:使用嵌入的網頁檢視。
  • BROWSER:使用裝置上的預設瀏覽器。

multiple_clouds_supported

對於支援多個國家雲端的用戶端,請指定 true。 Microsoft 身分識別平台 在授權及代幣兌換過程中,會自動重新導向正確的國家雲端。 您可以透過查看與 AuthenticationResult該帳戶相關的權限來判斷該登入帳號的全國雲端。 請注意,它 AuthenticationResult 並未提供你申請令牌的資源的國家特定雲端端點地址。

broker_redirect_uri_registered

一個布林值,表示你是否使用與 Microsoft Identity 相容的代理商內重定向 URI。 如果你不想在應用程式內使用經紀人,就設為false

如果你使用 Microsoft Entra Authority,並將 Audience 設定為 "MicrosoftPersonalAccount",經紀人將不會被使用。

http

設定 HTTP 逾時的全域設定,例如:

房產 資料類型 必要 Notes
connect_timeout int No 時間以毫秒計
read_timeout int No 時間以毫秒計

記錄

以下全域設定用於記錄:

房產 數據類型 必要 Notes
pii_enabled 布林值 No 是否要發布個人資料
log_level 字串 No 哪些日誌要輸出訊息。 支援的對數層級包括 ERRORWARNINGINFOVERBOSE和。
logcat_enabled 布林值 No 是否除了日誌介面外,還要輸出到 log 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. 告訴 MSAL 在建構 PublicClientApplication. 例如:

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