我试图创建一个应用程序使用Skype的商业网络SDK。
以下是登录代码的部分:
var config = {
apiKey: 'a42fcebd-5b43-4b89-a065-74450fb91255', // SDK
apiKeyCC: '9c967f6b-a846-4df2-b43d-5167e47d81e1' // SDK+UI
};
var Skype;
var app;
console.log(Skype);
Skype.initialize({ apiKey: config.apiKey }, function(api) {
window.skypeWebAppCtor = api.application;
window.skypeWebApp = new api.application();
Application = api.application;
app = new Application();
console.log("app", app);
skypeSignIn();
window.skypeWebApp.signInManager.state.changed(function(state) {
console.log("in",state);
});
}, function(err) {
console.log(err);
console.log("cannot load the SDK");
});
var skypeSignIn = function() {
app.signInManager.signIn({
"client_id": "my-GUID", // GUID obtained from Azure app registration.
"origins": ["https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root"],
"cors": true,
"redirect_uri": 'https://freshservice.com',
"version": 'freshservice skype for business integration'
}).then(function() {
alert('Logged in!');
});
当我尝试上面的代码,它给出了一个错误401在源URL -
GET https://webdirin1.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user 401 (Unauthorized)
如何修复?
您上面共享的代码片段没有任何将用户重定向到Azure Active Directory (AAD)以便用户可以输入其凭据的代码。如果用户已经登录到浏览器,这是可以的,但否则您将需要重定向到AAD,允许用户登录,一旦AAD重定向回您的应用程序,然后调用app.signInManager.signIn
方法。
查看更多详细信息:https://msdn.microsoft.com/en-us/skype/websdk/developwebsdkappsforsfbonline
确保您提供的重定向uri在AAD应用程序中配置为有效的应答url。
在登录过程中,您将注意到401。每次发生这种情况时,sdk都会重定向到AAD以获取令牌。如果用户已经登录,那么AAD应该用location.hash
属性中的访问令牌重定向到所提供的uri。
首先,您需要使用Azure Active Directory获得应用程序的授权。这将返回一个访问令牌,然后随每个请求一起发送。如果没有这个访问令牌,所有请求都将是未经授权的。要获得访问令牌,您可以参考有关如何在线设置Skype Web SDK的资源。
然后在你的应用程序被授权后,你就可以使用Skype了。初始化和登录。这实际上会让你登录到Skype For Business。
除此之外,如果您已经授权,从服务器获得未经授权的响应是正常的。当应用程序第一次尝试登录时。如果服务器返回未授权,则启动授权过程。