访问Skype for Business API(UCWA):HTTP 403 /禁止访问

时间:2017-09-04 11:49:02

标签: azure skype-for-business ucwa

我试图连接到&使用 Skype for Business API (UCWA)following this procedure,使用Node.js测试脚本。

我已在Azure AD中注册了测试应用,并检查了有关 Skype for Business Online 的所有权限。

我这样做(简化):

var adal = require('adal-node');
var https = require('https');

var clientId = 'a5cbbd......cc4a1'; // = app ID
var clientSecret = 'IOSDk1......LJ6vE=' // test key from Azure AD

var context = new adal.AuthenticationContext('https://login.windows.net');

// 'Autodiscover' step
// (callRestAPI() makes an HTTPS request using https.request() and returns results as JSON)

callRestAPI('webdir.online.lync.com', 443, '/autodiscover/autodiscoverservice.svc/root', 'GET', null /* no specific headers */, function(err, res) {

  if (err) { console.log(err); return err; }

  // extract discovered domain (I get something like https://webdir1e.online.lync.com)
  let regex = new RegExp('^(https?://[^/]*)', 'g');
  let sfbDiscoveredDomain = regex.exec(response._links.user.href);
  sfbDiscoveredDomain = sfbDiscoveredDomain[1];

  // 'Acquire token' step

  context.acquireTokenWithClientCredentials(sfbDiscoveredDomain, clientId, clientSecret, function(err, res) {

    if (err) { console.log(err); return err; }

    regex = new RegExp('^https?://([^/]*)', 'g');
    let sfbHost = regex.exec(res.resource);
    sfbHost = sfbHost[1]; // here I get something like 'webdir1e.online.lync.com'

    // 'Resending an autodiscovery request with the bearer token' step

    callRestApi(sfbHost, 443, '/autodiscover/autodiscoverservice.svc/root/oauth/user', 'GET', {'Authorization': 'Bearer '+res.accessToken}, function(err, res)    {

      if (err) { console.log(err); return err; }
      console.log(res);

    });
  });
});

最后一步(重新发送自动发现请求)始终失败,错误为 HTTP 403 /禁止

还有一个有趣的回复标题:

  

' x-ms-diagnostics':' 28070; source =" AM41E00EDG01.infra.lync.com&#34 ;; reason ="服务不允许来自此来源的跨域请求。"'

...但我仍然不明白为什么会出现这种错误。

我已经在各种代码示例(X-Ms-OriginHost)中播放了其他标题,但没有运气。

1 个答案:

答案 0 :(得分:1)

此问题(服务不允许来自此来源的跨域请求。)主要由“跨源资源共享(CORS)”引起,并且请求访问的地址不是“白名单”。

当服务器在内部时,Skype for Business管理员可以通过(更多信息here)配置(参见StackOverflow问题here):

$x = New-CsWebOrigin -Url "https://apps.contoso.com"
Set-CsWebServiceConfiguration -Identity "{YOUR_IDENTITY}" -CrossDomainAuthorizationList @{Add=$x}

然而,由于您的Skype for Business不在内部(在线),我认为您无法做任何事情,因为此部分主要由Microsoft的云管理员控制。

然而,由于UCWA在线支持Skype for Business,我认为您的身边有问题。您是否按照here说明检查了应用程序是否正确注册?如果是,可以使用提琴手跟踪查看导致该问题的原因。