You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MSAL中处理AADSTS50105错误并实现自定义未授权提示?

MSAL Angular 处理Azure AD用户未分配应用错误方案

这个场景下默认跳不出Azure AD错误页的核心原因是Azure AD在身份校验阶段就直接拦截了请求,不会默认回调到你的应用地址,需要先调整Azure AD侧配置,再配合MSAL的错误拦截逻辑实现自定义无权限页。

1. 调整Azure AD应用注册配置,让错误回调到应用

  • 打开对应Azure AD应用的「品牌与属性」配置页,找到错误 URL配置项,填入你的Angular应用无权限提示页的完整地址,比如https://你的应用域名/unauthorized
  • 配置完成后,当触发「用户未分配应用」错误时,Azure AD会自动跳转至你填写的地址,不会停留在官方默认错误页

2. 配置MSAL错误拦截做兜底校验

如果你使用的是MSAL Angular v2及以上版本,可以添加错误拦截逻辑做二次兜底,避免特殊场景下跳转失效:

2.1 全局MSAL实例日志捕获

在app.module.ts的MSAL实例工厂配置中添加错误判断逻辑:

export function MSALInstanceFactory(): IPublicClientApplication {
  return new PublicClientApplication({
    auth: {
      clientId: '你的应用客户端ID',
      authority: 'https://login.microsoftonline.com/你的租户ID',
      redirectUri: '/',
      postLogoutRedirectUri: '/'
    },
    system: {
      loggerOptions: {
        loggerCallback: (level, message, containsPii) => {
          // 捕获用户未分配应用的专属错误码AADSTS50105
          if (message.includes('AADSTS50105')) {
            window.location.href = '/unauthorized';
          }
        }
      }
    }
  });
}

2.2 登录失败事件捕获

如果使用重定向登录流,可以通过MSAL广播服务捕获登录失败事件做跳转:

this.msalBroadcastService.msalSubject$
  .pipe(filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_FAILURE))
  .subscribe((result: EventMessage) => {
    const error = result.error as AuthError;
    if (error?.errorMessage?.includes('AADSTS50105')) {
      this.router.navigate(['/unauthorized']);
    }
  });

3. 无权限页逻辑说明

你可以在/unauthorized路由对应的页面中自定义展示内容,包括提示用户当前无应用访问权限、告知用户联系管理员分配权限的操作指引,或者接入内部自助权限申请入口均可。
AADSTS50105是Azure AD官方定义的「已认证用户未分配到目标应用」的专属错误码,该场景下所有错误都会携带该标识,不会和其他登录错误混淆。

内容的提问来源于stack exchange,提问作者DGilmour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:30:03