我试图连接到&使用 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-Origin
和Host
)中播放了其他标题,但没有运气。
答案 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说明检查了应用程序是否正确注册?如果是,可以使用提琴手跟踪查看导致该问题的原因。