【发布时间】:2017-09-04 11:49:01
【问题描述】:
我正在尝试使用 Node.js 测试脚本连接并使用 Skype for Business API (UCWA) following this procedure。
我在 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/Forbidden。
还有一个有趣的响应头:
'x-ms-diagnostics': '28070;source="AM41E00EDG01.infra.lync.com";reason="服务不允许来自该来源的跨域请求。"'
...但是我还是不明白为什么会出现这个错误。
我在各种代码示例(X-Ms-Origin 和Host)中到处都看到了额外的标头,但没有运气。
【问题讨论】:
标签: azure skype-for-business ucwa