配置ADAL JS实现Azure AD认证后,外部Microsoft/Live账号无法登录
解决AADSTS50020错误:让Azure AD应用支持外部Microsoft/Live账号登录
这个错误其实很好理解——你的应用目前是单租户模式,只能允许你自己Azure AD租户(也就是提示里的"Default Directory")内的账号登录,外部的Microsoft/Live账号不在这个租户的用户列表里,所以被拒绝访问了。要搞定这个问题,咱们从Azure Portal配置到代码调整一步步来:
一、把Azure AD应用改成多租户模式
- 登录Azure Portal,找到你的应用注册(App Registrations)
- 选中你正在使用的应用,进入应用的详情页面
- 左侧菜单找到认证选项,点击进入
- 在「支持的账户类型」区域,把原来的「仅限此组织目录中的账户」改成「任何组织目录中的账户和个人Microsoft账户(例如Skype、Xbox)」
- 点击页面顶部的保存,等个几分钟让配置生效
二、确认应用权限配置没问题
- 还是在应用注册页面,左侧菜单选API权限
- 检查是否已经添加了
User.Read这个委托权限(这是用户登录时获取基本信息的必要权限,默认应该已经有了,但保险起见确认一下) - 如果没有的话,点击「添加权限」→ 选择Microsoft Graph → 选委托权限 → 找到并勾选
User.Read→ 最后点击「添加权限」
小贴士:多租户应用如果只用基础登录权限,不需要管理员同意,个人用户登录时自己授权就行
三、调整ADAL JS的代码配置
ADAL JS默认的配置可能是针对单租户的,咱们需要修改tenant参数:
- 原来的
tenant可能是你的租户ID或者域名,现在要改成common——这个值会引导用户到微软通用的登录端点,支持个人Microsoft账号和其他租户的企业账号登录 - 给你个示例配置参考:
var authConfig = { clientId: '你的应用Client ID', tenant: 'common', // 重点:把这里改成common,替换原来的租户ID/域名 redirectUri: '你的前端应用重定向URI', cacheLocation: 'localStorage' }; var authContext = new AuthenticationContext(authConfig);
四、验证效果
- 先清一下浏览器缓存(避免旧的登录会话干扰)
- 重启你的前端应用,尝试用Microsoft/Live账号登录试试
- 如果还是有问题,再检查下Azure Portal里的应用注册是否确实保存了多租户设置,以及代码里的重定向URI和Portal里配置的是否完全一致
补充说明:改成多租户模式后,原来的内部AD账号仍然可以正常登录,不会影响现有用户的使用哦~
内容的提问来源于stack exchange,提问作者Juha
相关产品推荐
相关产品推荐

