如果您的桌面或行動應用程式在 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 租戶)
- tenanted(採用
因為整合 Windows 認證是一個靜音流程:
- 使用者必須事先同意使用該應用程式
- 或者租戶管理員必須事先同意租戶內所有使用者使用該應用程式。
- 這表示:
- 你身為開發人員,已在 Azure 入口網站上為自己按下 Grant 按鈕,
- 或是租戶管理員在應用程式註冊的 API 權限標籤中按下 {tenant domain} 的授權/撤銷管理員同意按鈕
- 或者你提供了讓使用者同意該應用程式的方式
- 或者你已經提供了讓租戶管理員同意申請的方式