2017-09-04 113 views
1

我試圖連接到&使用商用版Skype API(UCWA)following this procedure,使用Node.js的測試腳本。商務API(UCWA)訪問Skype的:HTTP 403 /禁止

我在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-診斷':「28070;源= 「AM41E00EDG01.infra.lync.com」;原因=「服務不允許的橫「

......但我仍然不明白爲什麼會出現此錯誤。

我玩過在各種代碼示例(X-Ms-OriginHost)中看到的附加標題,但沒有運氣。

回答

1

此問題(服務不允許來自此源的跨域請求)主要由「跨源資源共享(CORS)」引起,並且請求訪問的地址不是「列入白名單」 。

的Skype的業務管理員可以通過配置(詳細信息的here)當服務器的處所(見的StackOverflow問題here):

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

然而作爲商用版S​​kype isn't的處所(它的在線版本)我認爲沒有什麼可以做的,因爲這部分主要由微軟的雲管理員控制。

但是,由於Skype for Business在線支持UCWA,因此我認爲您的方面有問題。您是否按照here的說明檢查了應用程序是否正確註冊?如果是,提琴手追蹤可能會有助於查看造成該問題的原因。

+0

感謝您的快速回復。但是,按照您的建議,我仔細檢查了註冊和身份驗證所需的所有6個步驟(查看步驟1-2應該在Azure管理中進行,步驟4-6從我的Node.js代碼中進行)。結果總是一樣的(錯誤HTTP 403/Forbidden與'x-ms-diagnostics'有關CORS問題的額外頭文件)。這可能是服務器端的問題嗎? –

+1

是的,正如通過提琴手所提到的,我們將能夠指出它。在那裏你可以看到X-Ms-Origin會有哪些值。也可以在瀏覽器中執行此操作(調出開發工具(F12),清除瀏覽器緩存(ctrl + R),轉到網絡選項卡和「啓動捕獲」)。指向更詳細的設置問題。不過,我認爲Microsoft Azure/Skype for Business Online支持可能是一個更好的選擇,可以幫助我們找到答案。到目前爲止,我會說你的天藍色服務器不允許在線上與Skype for Business交談...... – BastianW