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

ADAL.js示例在ASP.NET Core MVC中循环重定向,提示‘User login required’求助

解决ADAL.js在无Authorize特性的ASP.NET Core MVC项目中循环重定向AAD的问题

我之前也碰到过一模一样的循环重定向问题,大概率是这几个配置环节出了问题,你可以逐个排查:

  • 重定向URI不匹配(最常见原因)
    首先去Azure AD的应用注册里,检查“重定向URI”列表里有没有你当前项目的运行地址——比如本地调试的https://localhost:5001或者部署后的正式域名。ADAL.js默认会把当前页面地址作为回调地址,如果这个地址没在AAD应用里注册,AAD验证完用户身份后,会因为不认可回调地址而拒绝返回有效状态,导致页面再次触发登录流程。
    如果你在代码里手动指定了redirectUri,一定要保证它和AAD里注册的完全一致,比如:

    window.config = {
        tenant: variables.azureAD,
        clientId: variables.clientId,
        redirectUri: window.location.origin, // 这个地址必须在AAD应用注册的重定向URI列表里
        cacheLocation: 'localStorage'
    };
    
  • 登录状态缓存未正确配置
    ADAL.js需要依赖缓存来保存用户的登录状态,默认用sessionStorage的话,页面刷新或者跳转后状态很容易丢失,进而触发重新登录。建议显式设置cacheLocation: 'localStorage',这样跨页面的登录状态能持久保留。
    另外,页面初始化时要先检查缓存里的用户状态,不要直接触发登录。正确的初始化逻辑应该是这样的:

    var authContext = new AuthenticationContext(config);
    // 处理AAD返回的回调
    var isCallback = authContext.isCallback(window.location.hash);
    authContext.handleWindowCallback();
    
    // 回调成功后跳回之前的页面
    if (isCallback && !authContext.getLoginError()) {
        window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
    }
    
    // 检查缓存中的用户信息,不存在再触发登录
    var user = authContext.getCachedUser();
    if (!user) {
        authContext.login();
    } else {
        // 已登录,执行你的业务逻辑
    }
    
  • ASP.NET Core服务器端身份认证中间件干扰
    虽然你没加[Authorize]特性,但如果Startup.cs里配置了Azure AD的服务器端身份认证中间件,可能会和ADAL.js的前端认证流程冲突。检查ConfigureServices方法里有没有类似这样的代码,如果不需要服务器端认证,直接注释掉:

    // 注释掉不需要的服务器端认证配置
    // services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    //    .AddAzureAD(options => Configuration.Bind("AzureAd", options));
    
  • AAD应用权限配置不足
    去应用注册的“API权限”页面,确认已经添加了必要的权限(比如User.Read这种基础权限),并且已经授予了管理员同意(如果是面向整个租户的应用)。如果权限不足,ADAL.js获取令牌失败,也会导致重新触发登录流程。

按照上面的步骤排查一遍,应该就能解决循环重定向的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:26