【问题标题】:acquireToken callback never called从未调用 acquireToken 回调
【发布时间】:2017-08-26 01:12:01
【问题描述】:

initial post 将 adal.js 与 Vue.js 集成之后,我取得了一些进展。我已成功登录,我希望设置的属性正在 localStorage 中设置。

但是,对 acquireToken 的调用永远不会调用我传递的回调。代码如下所示:

let url = 'https://api.webserver.com/api/endpoint';

authContext.acquireToken(url, (err, token) => {
  console.log(`acquiring token for ${url}`);
  console.log(err, token);
});

查看adal.js的源码,acquireToken的方法签名如下:

AuthenticationContext.prototype.acquireToken(resource, callback)

回调未被调用。我传递的 url 值是该方法所期望的吗?我不清楚这一点。

感谢您的帮助。提前致谢!

【问题讨论】:

    标签: javascript vue.js adal adal.js


    【解决方案1】:

    根据你的init帖子,你已经完成了Azure AD应用的配置,你可以尝试将acquireToken()函数下的url替换为client_id

    根据adal for js的源码,acquireToken()调用getCachedToken()L515

    getCachedToken()函数会通过var token = this._getItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY + resource);获取浏览器会话中的token,登录成功后可以在浏览器的DEV TOOL中查看所有的AD信息。我们可以发现这里的资源是client_id格式的。

    【讨论】:

    • 好吧,我搞定了!但是......令牌似乎没有正确刷新。我假设连续调用 acquireToken 会保持令牌更新。但是,会话似乎在大约 30 分钟后结束,并且在这种情况下不会调用回调。
    【解决方案2】:

    在AdalJS 1.0.13版本中,如果想有回调,可以使用如下代码:

                    authContext.acquireToken('https://api.webserver.com/api/endpoint').then(function (token) {
                        console.log(token)
                    },function(error){
                        console.log('Failed to acquire token');  
                    }
                );
    

    【讨论】:

    • 你确定吗? acquireToken 不返回 Promise 或任何类型的 then-able 对象。
    • 什么版本的 adal.js?
    • 我正在使用 AdalJS v1.0.13
    • 明白了。从当前版本 1.0.14 开始不再是这种情况(尽管我希望是这样!!!)。如果您更新答案以指定您正在使用的承诺方法在 1.0.13 中有效,我很乐意删除反对票。
    猜你喜欢
    • 2019-02-09
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多