调用AAD时AADSTS50058会导致刷新循环

时间:2017-01-27 17:11:44

标签: angularjs azure-active-directory azure-ad-graph-api adal.js

有时我从Angular调用Azure Active Directory图谱API时会收到错误AADSTS50058。

我的设置:

  • adal-angular 1.0.13
  • angular v1.5.8
  • 谷歌浏览器没有任何标记'阻止第三方Cookie'
  • 尝试使用KMSI标志
  • 没有阻止Chrome上的Cookie的扩展程序(最新)
  • 更新:路由包" angular-route"

这是代码:

var my_endpoints = {
    'https ://graph.windows.net/': 'https ://graph.windows.net/'
};

adalProvider.init({
    instance: 'https ://login.microsoftonline.com/',
    tenant: "common",
    clientId: '[my-client-ID-here]',
    extraQueryParameter: 'nux=1',
    cacheLocation: 'sessionStorage',
    endpoints: my_endpoints 
}, $httpProvider);

n.b。:https链接没有空格,我设置了这个因为stackoverflow。

这是我无法解决的错误: 错误AADSTS50058:已发送静默登录请求但未登录任何用户。用于表示用户会话的cookie未在请求中发送到Azure AD。如果用户使用的是Internet Explorer或Edge,并且发送静默登录请求的Web应用程序位于与Azure AD端点(login.microsoftonline.com)不同的IE安全区域中,则会发生这种情况。

试图断开连接并重新登录但没有成功

我能解决的尴尬是它经常有效,然后有时会引发这个错误,使页面保持重载循环。 如果我删除AAD调用它会按预期工作。

这是因为我必须管理2个令牌,一个使用API​​,一个使用AAD GraphAPI?

如果是,我该如何管理呢?

任何帮助都非常感谢

2 个答案:

答案 0 :(得分:2)

根据您的描述,您似乎随机面临无限循环问题。可能有多种原因引发这个问题。

首先,您可以检查是否使用ui-router,如果是,请检查您是否为根页" /"设置了阶段定义。将此添加到您的州提供商路由:

 $stateProvider.state("/", {
        url: "/",
        templateUrl: "<could be home page or default page>",
        requireADLogin: true,
    }); 

此外,此问题可能还有其他一些原因,例如嵌套iframe创建哈希重置。您可以参考https://github.com/AzureAD/azure-activedirectory-library-for-js/wiki/FAQs#q2-my-app-gets-into-an-infinite-loop-sometimes-leading-to-digest-iterations-error了解更多信息。

此外,您可以将以下代码添加到app.js以打开日志记录。根据您希望重定向日志的方式实现日志方法。

Logging = {
    level: 3,
    log: function (message) {
        console.log(message);
    }
};

此外,您还可以使用Chrome开发者工具查看所有信息,包括在视觉存储中的错误说明:

enter image description here

答案 1 :(得分:0)

我想我已经找到了这个问题; 在谷歌浏览器中,在压力测试中,在登录后立即将浏览器问我的“保存密码”浏览器弹出窗口设置为“从不”; 在金丝雀和其他浏览器中,我设置“保存”或简单地忽略,问题从未出现过。

似乎在清除“从未保存”密码列表后修复了问题。

复选框“使用智能锁密码记住应用和网站的密码”或“提供保存您的网络密码”无关紧要,经过测试检查状态且未经过检查。

谢谢你!