Adal Angular4 - AcquireToken呼叫返回'令牌更新操作因超时错误而失败'

时间:2018-01-08 02:53:57

标签: angular azure-active-directory microsoft-graph adal

我试图从adal-angular4示例项目adal-angular4-example调用Microsoft Graph Api。

我已添加此代码以获取图表api的令牌。

home.component.ts

getGraphToken(){

    if (this.service.getCachedToken([** CLIENT-ID **])){

      //this.service.handleWindowCallback();

      this.service.acquireToken("https://graph.microsoft.com")
        .subscribe(
          data => console.log(data), 
          err => console.log(err));
    }

    //this.service.handleWindowCallback();

  }

home.component.html

  <tr>
    <span><button md-button (click)="getGraphToken();">Get Graph Token</button></span>
  </tr>

使用azure config更新了app.component.ts

// Adal Configuration
const config = {
  tenant: 'tenant-id-here',
  clientId: 'client-id-here'
};

出于某种原因,我收到错误&#39;令牌更新操作由于超时而失败&#39;而不是填充数据令牌。

如果我查看浏览器的网络选项卡,我可以看到响应有302并且确实附加了新的访问令牌。

我可以手动复制此访问令牌,转发邮递员,将其添加为持票人令牌,并对图表进行成功调用。

似乎没有处理回调的实际处理。

我还尝试过handleWindowCallback函数的各个位置。

有关如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:0)

当您获取Token时,页面在调用 handleWindowCallback 之前不应刷新。

在您重定向到的地方登录后,在那儿获取handleWindowCallback,然后使用acquireToken获取数据将返回数据。

return this.adalService.acquireToken(environment.config.spUrl).flatMap(
      token => {
        const headersParam = new HttpHeaders({
          'Content-Type': 'application/json;odata=verbose',
          'Authorization': 'Bearer ' + token.toString()
        });
        return this.http.get(url, { headers: headersParam });
      });