我试图从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函数的各个位置。
有关如何使其发挥作用的任何想法?
答案 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 });
});