【问题标题】:Intermittently Can't Get AAD Token间歇性无法获取 AAD 令牌
【发布时间】:2020-03-08 09:51:51
【问题描述】:

我为 SharePoint Online 创建了一个自定义 Web 部件,它连接到由 AAD 保护的 Web API,然后将结果显示到屏幕上。它运行良好,但在尝试检索访问令牌时,它会在一天中多次停止。它不会抛出异常,它只是挂起。

起初,我的代码反映了 connecting to AAD secured resources in SharePoint 文档中的内容,但当 AadHttpClient 开始挂起时,我了解到其他人对此有疑问。因此,我更改了我的代码以创建一个 AadTokenProvider 并在其上调用 getToken() 以生成一个令牌,我可以在常规 httpClient.get() 请求中手动添加到标头中。

这并没有解决问题,但它确实告诉我getToken() 肯定是它停止的地方。我不确定getTokenProvider() 是否返回了导致getToken() 挂起的时髦内容,或者getToken() 是否由于与SharePoint 或AAD 相关的原因而挂起。

它似乎在一段时间不活动后也经常失败,就像它试图获取一个过时的提供程序/令牌并且未能更新但我不知道如何确认这一点或该做什么去做吧。

为什么我无法可靠地获取令牌?

这是我的代码:

this.context.aadTokenProviderFactory.getTokenProvider()
  .then((provider) => { 
      return provider.getToken('<Client ID for my API>', false); //THIS IS WHERE IT HANGS    
  })
  .then((token) => { 
    this.context.httpClient
      .get('https://www.example.com/api/myAPI/', AadHttpClient.configurations.v1, {
        headers: [
          ['accept', 'application/json'],
          ['Authorization', 'Bearer ' + token]
        ]
      })
      .then((res: HttpClientResponse): Promise<any> => {
        return res.json();
      })
      .then(data => {
          //process data
      }, (err: any): void => {
        this.context.statusRenderer.renderError(this.domElement, err);
      });
    })
  .catch((err) => {
    this.context.statusRenderer.renderError(this.domElement, "Failed to retrieve data.");
  });

编辑:我注意到当它不起作用时,我在控制台中收到以下几个错误:

'&lt;URL&gt;' 中阻止脚本执行,因为文档的框架已被沙盒化并且未设置“允许脚本”权限。

'&lt;URL&gt;' 类似于 https://my tenant.sharepoint.com/_forms/spfxsinglesignon.aspx

【问题讨论】:

    标签: typescript sharepoint azure-active-directory access-token spfx


    【解决方案1】:

    微软错误

    经过back and forth with Microsoft,我们确认这是与底层代币获取代码相关的错误。显然身份验证代码中有一个race() 条件无法正确解析。

    截至目前(2020 年 1 月),尚无修复方案,但根据 bug report,大约一个月后应该会准备好一些东西。

    解决方法

    我们发现,当您的自定义 Web 部件与其他 OOTB Web 部件(例如文档库和事件 Web 部件)位于同一页面时,就会出现此问题。通过将文档库 Web 部件移动到不同的页面,问题就消失了。

    因此,对于遇到此问题的任何人,您应该能够通过将 1 个或多个 OOTB Web 部件与您的自定义 Web 部件分开来解决该问题。 至少在错误解决之前固定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2021-09-17
      • 1970-01-01
      • 2021-01-22
      • 2019-06-11
      • 1970-01-01
      • 2019-04-11
      相关资源
      最近更新 更多