ClientAuthError:令牌调用在隐藏的iframe中被阻止

问题描述 投票:2回答:1

我正在使用MSAL.js作为Azure Active Directory的客户端来构建javascript SPA。

当这样请求我的API的访问令牌时

var requestObj = {
  scopes: ["api://MyApi/Access"]
};
msalUserAgent.acquireTokenSilent(requestObj ) 

Msal在内部创建自己的iframe来处理请求,然后给出以下关于在不受支持的iframe中进行操作的错误:

ClientAuthError: Token calls are blocked in hidden iframes
    at ClientAuthError.AuthError [as constructor] (webpack-internal:///./node_modules/msal/lib-es6/error/AuthError.js:26:28)
    at new ClientAuthError (webpack-internal:///./node_modules/msal/lib-es6/error/ClientAuthError.js:111:28)
    at Function.ClientAuthError.createBlockTokenRequestsInHiddenIframeError (webpack-internal:///./node_modules/msal/lib-es6/error/ClientAuthError.js:192:16)
    at Function.WindowUtils.blockReloadInHiddenIframes (webpack-internal:///./node_modules/msal/lib-es6/utils/WindowUtils.js:206:90)
    at eval (webpack-internal:///./node_modules/msal/lib-es6/UserAgentApplication.js:474:77)
    at new Promise (<anonymous>)
    at UserAgentApplication.acquireTokenSilent (webpack-internal:///./node_modules/msal/lib-es6/UserAgentApplication.js:472:16)
    at Object.ensureUserLoggedIn (webpack-internal:///./src/services/ActiveDirectoryService.js:93:19)
    at eval (webpack-internal:///./src/main.js:36:89)
    at Module../src/main.js (http://localhost:8080/js/app.js:1178:1)

我的网页似乎仍然可以按预期工作,但我确实不愿意携带未解决的错误,所以我试图找出问题的原因。

[尝试解决此I have found this issue on github,它看起来很像我的问题。它确认AcquireTokenSilent确实创建了一个iFrame,该iFrame重定向回到主spa应用程序(然后该应用程序尝试登录并请求令牌...因此基本上是无休止的递归)。这就是为什么它被阻止的原因。

其中一项建议是将redirectUri指定为没有我尝试过的MSAL的页面,但操作失败,如下所示:>

 request = {
      scopes:  ["api://MyApi/Access"],
      redirectUri: "http://localhost:8080/token-landing.html"
    };
    // }
    return msalUserAgent.acquireTokenSilent(request);

这还没有解决问题,很难确定是否使用了重定向。其他建议是在每次尝试获取令牌的地方都检查URL中是否有“#”,因为SPA网站中“#”非常普遍。

我正在使用MSAL.js作为Azure Active Directory的客户端来构建javascript SPA。当为我的API请求访问令牌时,例如var requestObj = {作用域:[“ api:// MyApi / Access”]}; ...

javascript azure azure-active-directory msal
1个回答
0
投票

对于有此问题的人,我通过指定正确的redirectUri来解决。

© www.soinside.com 2019 - 2024. All rights reserved.