使用az login或MSAL登录Azure时如何强制触发MFA?
强制在az login或MSAL登录时触发MFA的方法
一、使用az login强制触发MFA
通过命令行参数强制清除缓存会话、触发完整登录流程,确保MFA验证被触发:
- 基础命令(指定租户+强制重新登录):
az login --tenant <你的租户ID/域名> --prompt=login - 若存在旧登录缓存,添加
--force-refresh彻底清除缓存,保证从头触发MFA:az login --force-refresh --prompt=login --scope https://management.azure.com/.default
--prompt=login会跳过本地缓存的会话,强制用户重新输入凭据并完成MFA;--scope指定需要访问的Azure资源范围,确保令牌符合后续OBO流程的权限要求。
二、使用MSAL强制触发MFA
在MSAL的登录请求中,通过prompt参数强制重新登录,同时通过claims参数明确要求包含MFA认证声明,确保令牌能通过后续条件访问策略验证:
Python示例
from msal import PublicClientApplication # 初始化客户端 app = PublicClientApplication( client_id="你的客户端ID", authority="https://login.microsoftonline.com/你的租户ID" ) # 触发带MFA的交互式登录 result = app.acquire_token_interactive( scopes=["https://management.azure.com/.default"], prompt="login", # 强制跳过缓存,重新登录 claims={"access_token": {"amr": ["mfa"]}} # 要求令牌包含MFA认证声明 )
.NET示例
using Microsoft.Identity.Client; var pca = PublicClientApplicationBuilder .Create("你的客户端ID") .WithAuthority("https://login.microsoftonline.com/你的租户ID") .Build(); // 触发交互式登录并强制MFA var result = await pca.AcquireTokenInteractive(new[] {"https://management.azure.com/.default"}) .WithPrompt(Prompt.ForceLogin) // 强制重新登录 .WithClaims("{\"access_token\": {\"amr\": [\"mfa\"]}}") // 指定需要MFA声明 .ExecuteAsync();
关键逻辑说明
通过prompt=login(或Prompt.ForceLogin)跳过本地缓存的会话,强制用户完成完整的身份验证流程;claims参数明确告知Entra ID,只有包含MFA认证(amr声明为mfa)的令牌才会被接受,这样就能主动触发MFA,避免后续OBO流程中因令牌未通过MFA验证而被条件访问策略拒绝。
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

