PowerShell运行Azure委托权限应用时无法切换登录账户问题
解决PowerShell中Get-MsalToken无法选择其他账户的问题
我之前也碰到过完全一样的情况!MSAL(Microsoft Authentication Library)默认会优先复用当前PowerShell会话或系统里已缓存的Azure AD账户凭据,所以才会直接跳过账户选择环节,默认用启动PowerShell时的账户登录。下面是几个有效的解决方法:
方法1:添加Prompt参数强制显示账户选择界面
修改你的脚本,在MsalParams里加入Prompt = "select_account"参数,这样就能强制弹出完整的登录窗口,允许你选择已有账户或输入新账户的凭据:
$TenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $AppClientId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $MsalParams = @{ ClientId = $AppClientId TenantId = $TenantId Scopes = "https://graph.microsoft.com/User.Read" Prompt = "select_account" # 强制显示账户选择界面 } $MsalResponse = Get-MsalToken @MsalParams $AccessToken = $MsalResponse.AccessToken
如果需要完全强制重新登录(比如不想看到已有的账户列表,直接从头输入用户名密码),可以把Prompt的值改成"login":
$MsalParams = @{ ClientId = $AppClientId TenantId = $TenantId Scopes = "https://graph.microsoft.com/User.Read" Prompt = "login" # 强制重新输入凭据,忽略所有缓存 }
方法2:清除MSAL的本地凭据缓存
如果之前的账户缓存还是干扰登录流程,可以先运行下面的命令清除所有MSAL存储的凭据:
Clear-MsalTokenCache
执行完这个命令后再重新运行你的脚本,就会从头开始引导你登录,不会有任何默认账户的干扰了。
补充说明
如果你的PowerShell之前运行过Connect-AzAccount或其他Azure登录命令,会话中会保留Azure AD上下文,这时候MSAL会自动复用这个上下文。上面的Prompt参数可以直接绕过这个复用逻辑,强制显示登录界面。
内容的提问来源于stack exchange,提问作者Blue Tongue
相关产品推荐
相关产品推荐

