Azure AD开启需用户分配时同租户未授权用户的MSAL处理方案问询
针对AADSTS50105无角色权限登录错误的MSAL捕获及账号切换方案
前置配置检查
首先确认你在Azure门户的应用注册配置正确:
- 开启「需要用户分配」开关后,要确保身份验证板块下的单页应用(SPA)重定向URI配置正确,不能误填为Web类型,否则认证错误会直接抛出到Azure默认错误页,无法回传给你的SPA应用捕获。
错误捕获与账号切换实现
MSAL的两种常用登录流,都可以直接在回调的错误捕获逻辑中识别AADSTS50105错误,触发账号切换逻辑:
重定向登录流
通过handleRedirectPromise处理认证端回传的响应时,在catch分支匹配错误码即可:
msalInstance.handleRedirectPromise() .then(authResponse => { if (authResponse) { // 正常登录成功后的业务逻辑 } }) .catch(error => { // 匹配无权限错误 if (error.errorCode === '50105' || error.errorMessage.includes('AADSTS50105')) { // 触发账号选择界面,引导用户切换其他账号登录 msalInstance.loginRedirect({ scopes: ['你申请的权限scope列表'], prompt: 'select_account' }) } })
弹窗登录流
直接在loginPopup的catch分支捕获错误即可:
msalInstance.loginPopup({ scopes: ['你申请的权限scope列表'] }) .then(authResponse => { // 正常登录成功后的业务逻辑 }) .catch(error => { if (error.errorCode === '50105' || error.errorMessage.includes('AADSTS50105')) { // 触发带账号选择的登录弹窗 msalInstance.loginPopup({ scopes: ['你申请的权限scope列表'], prompt: 'select_account' }) } })
优化建议
如果想降低该错误的触发概率,可以在首次调用登录接口时就加上prompt: 'select_account'参数,强制用户主动选择登录账号,避免默认使用当前浏览器已登录的无权限租户账号。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

