Adal Angular5 Adal5Service.acquireToken由于超时而导致令牌更新操作失败"但是网络中有成功的请求

时间:2018-02-05 13:19:03

标签: angular azure-active-directory angular5 adal adal.js

尝试使用adal-angular5并遇到Adal5Service.acquireToken方法的问题:它总是落在:

  

令牌更新操作因超时而失败

StackBlitz上的在线完整示例。测试:

  • 粘贴您的租户
  • 粘贴您的clientId
  • Azure Portal为您的应用
  • 注册网址https://angular-96tws9.stackblitz.io
  • 在新窗口中打开

以下是app.component.ts

import { Component, OnInit } from '@angular/core';
import { Adal5Service } from 'adal-angular5';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  constructor(private adalSvc: Adal5Service) {
    let config: adal.Config = {
      tenant: 'XXX.onmicrosoft.com',
      clientId: '21efffd5-29fc-XXX',
      postLogoutRedirectUri: window.location.origin,
      endpoints: {
        graphApiUri: "https://graph.microsoft.com",
      },
      cacheLocation: "localStorage",
      redirectUri: ''
    };

    this.adalSvc.init(config);
  }

  ngOnInit(): void {
    this.adalSvc.handleWindowCallback();

    if (!this.adalSvc.userInfo.authenticated) {
      this.adalSvc.login();
      return;
    }

    // work correct
    console.log(this.adalSvc.userInfo.username);

    this.adalSvc.acquireToken("https://graph.microsoft.com")
      .subscribe(
        token => console.log(token), // never comes
        error => console.log(error)); // error: Token renewal operation failed due to timeout
  }
}

网络中有正确获取的令牌: enter image description here

页面错误 enter image description here

以下是package.json

{
  "name": "angular-template",
  "description": "",
  "homepage": "https://stackblitz.com/edit/angular-96tws9",
  "dependencies": {
    "@angular/animations": "^5.0.0",
    "@angular/common": "5.0.0",
    "@angular/compiler": "5.0.0",
    "@angular/core": "5.0.0",
    "@angular/forms": "5.0.0",
    "@angular/http": "^5.0.0",
    "@angular/platform-browser": "5.0.0",
    "@angular/platform-browser-dynamic": "5.0.0",
    "@angular/router": "5.0.0",
    "core-js": "2.5.1",
    "rxjs": "5.5.2",
    "zone.js": "0.8.18",
    "adal-angular5": "1.0.36"
  },
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "devDependencies": {
    "@angular/cli": "1.5.4",
    "@angular/compiler-cli": "^5.0.0",
    "@angular/language-service": "^5.0.0",
    "@types/jasmine": "~2.5.53",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "~3.0.1",
    "jasmine-core": "~2.6.2",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "~1.7.0",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.1.2",
    "ts-node": "~3.0.4",
    "tslint": "~5.3.2",
    "typescript": "~2.4.2"
  }
}

3 个答案:

答案 0 :(得分:0)

我不确定这是否是您的实施,但似乎其他人也有this issueThis issueng2-adal表示acquireToken()存在问题adal-angular@1.0.16(阅读上次评论)。

adal-angular是这两个adal实现的底层包。我自己使用ng2-adal遇到了这个并降级为adal-angular@1.0.14并让acquireToken()工作。不知道adal-angular5如何处理这个问题。

Here是我使用ng2-adal包(使用Angular / .NET Core)和another(独立)的示例,如果您想要尝试ng2-adal。希望这会有所帮助。

答案 1 :(得分:0)

最后让它工作,没有adal-angular5库。 <{3}}

  • 授权用户
  • 获取Microsoft Graph Api的令牌
  • 从Microsoft Graph Api
  • 获取用户消息
  • 沉默续订令牌

示例仅使用标准full example(没有包装)和来自Adal.js的输入法。

Angular溃败正在发挥作用。此外,续订令牌时没有双重请求。

答案 2 :(得分:0)

该错误来自于依赖关系的参考:adal-angular 在库adal-angular5中,相关性不好。 您不必使用adal-angular重新启动。 这个话题可以帮助我:benbaran issue comment