整合式 Windows 驗證

如果您的桌面或行動應用程式在 Windows 上運行,且在連接到 Windows 網域(Active Directory 或 Microsoft Entra 加入)的機器上,您可以使用整合 Windows 認證(IWA)來靜默取得令牌。 使用此應用程式時不需要 UI。

final String AUTHORITY;
final String APP_ID;
String userName;
List<String> scopes;

PublicClientApplication app = PublicClientApplication.builder(APP_ID)
        .authority(AUTHORITY)
        .build();

IntegratedWindowsAuthenticationParameters parameters =
        IntegratedWindowsAuthenticationParameters.builder(scope, userName).build();

IAuthenticationResult future = app.acquireToken(parameters).get();

Constraints

  • 僅限 Federated* 使用者,也就是認證與本地權限(例如 ADFS)聯邦化,或是啟用無縫 SSO 的混合情境。 純雲端租戶,使用者直接使用 Microsoft Entra ID,且沒有任何 Active Directory 支援,無法使用此流程。
  • IWA 不會繞過多重驗證(MFA)。 如果已設定 MFA,則在需要 MFA 挑戰時,IWA 可能會失敗,因為 MFA 需要使用者互動。

這個問題比較棘手。 IWA 是非互動式的,但 2FA 需要使用者互動。 你無法控制身份提供者何時要求執行雙重驗證,租戶管理員才是。 根據我們的觀察,當你從不同國家/地區登入、未透過 VPN 連接到企業網路,甚至有時連上 VPN 時,都需要雙重驗證。 別期待一套確定性的規則,Microsoft Entra ID 會用 AI 持續學習是否需要 2FA。 如果 IWA 失敗,你應該回退到使用者提示

  • 所授予 PublicApplication 的權限要求為:

    • tenanted(採用 https://login.microsoftonline.com/{tenant}/ 的格式,其中 tenant 可以是代表租用戶 ID 的 GUID,或是與該租用戶相關聯的網域。)
    • 所有工作帳戶和學校帳戶 (https://login.microsoftonline.com/organizations/)

    Microsoft 個人帳號不被支援(你無法使用 /common 或 /consumers 租戶)

  • 因為整合 Windows 認證是一個靜音流程:

    • 使用者必須事先同意使用該應用程式
    • 或者租戶管理員必須事先同意租戶內所有使用者使用該應用程式。
    • 這表示:
      • 你身為開發人員,已在 Azure 入口網站上為自己按下 Grant 按鈕,
      • 或是租戶管理員在應用程式註冊的 API 權限標籤中按下 {tenant domain} 的授權/撤銷管理員同意按鈕
      • 或者你提供了讓使用者同意該應用程式的方式
      • 或者你已經提供了讓租戶管理員同意申請的方式