UCWA Lync аутентификация - 500 веб-билет недействителен
Я пытаюсь создать простой клиент для Lync, используя Nodejs. Основываясь на http://ucwa.lync.com/documentation/KeyTasks-CreateApplication я сделал что-то вроде этого. Это работает до последнего шага #9, когда я должен зарегистрировать свое приложение в UCWA. Сервер отвечает кодом 500 и глупым объяснением
Возникла проблема с ресурсом, который вы ищете, и он не может быть отображен
И заголовки
x-ms-Diagnostics': '28032;source="mysource";reason="Веб-билет недействителен."'
var http = require('request-promise');
var lync = {};
lync.setup = function(email, password){
var self = this;
var hostname = email.split('@');
this.username = email;
//discover urls
return http.get('http://lyncdiscover.'+hostname[1])
.then(function(d) {
var parsed = JSON.parse(d);
self.urls = {
self: parsed._links.self.href,
user: parsed._links.user.href,
xframe: parsed._links.xframe.href
};
return http.get(self.urls.user);
}).catch(function(err){
if(err.statusCode == 401){
var toParse = err.response.headers['www-authenticate'];
var Oauth = toParse.match(/https:\/\/[\d\w\./_-]*/i)[0];
var loginPost = {
grant_type: 'password',
username: email,
password: password
};
return http.post(Oauth, {form:loginPost});
}
return false
}).then(function(data){
var parsed = JSON.parse(data);
//setup authorization
http = http.defaults({
headers: {Authorization: parsed.token_type + ' ' + parsed.access_token}
});
//console.log(self.urls.user);
//console.log('Authorization:'+ parsed.token_type + ' ' + parsed.access_token);
return http.get(self.urls.user);
}).then(function(data){
var parsed = JSON.parse(data);
self.urls.applications = parsed._links.applications.href;
var registerApp = {
culture : "en-us",
endpointId : "2d9dc28d-4673-4035-825c-feb64be28e4e",
userAgent : "Test"
};
var r = "{'userAgent': 'NodeJs', 'endpointId' : '2d9dc28d-4673-4035-825c-feb64be28e4e', 'culture': 'en-US'}";
return http.post(self.urls.applications, {body: registerApp, json:true});
})
.then(function(data){
console.log(data);
})
.catch(function(err){
console.log(err);
return false;
});
};
//run app
lync.setup('login@domain.com', 'password').then(function(ret){
});
Один ключевой момент здесь. Это не мой сервер. У меня просто есть учетная запись, и я могу войти с помощью официального клиента Lync или плагина Pidgin. Существуют ли дополнительные шаги, чтобы "разрешить" моему приложению работать с UCWA?
@ShelbyZ Я могу легко авторизоваться с помощью Oauth. Я получаю токен авторизации, поэтому я вошел в систему.
Я получаю JSON, похожий на
"_links":{ "self":{"href":"link"}, "Applications":{"href":"Мне нужно это"}, "xframe":{"href":"link"} } }
Сейчас. Мне нужно "зарегистрировать свое приложение", делая POST. На этом последнем шаге я получаю 500 ответов кода. Надеюсь, это не связано с тем, что @Matthew Proctor сказал.. потому что я не могу просто администрировать сервер
2 ответа
Спасибо @ShelbyZ Вы были правы, это был сценарий разделения домена. Теперь авторизация работает, и я могу зарегистрировать свое приложение. Также пример для будущих поколений
var http = require('request-promise');
var lync = {};
lync._authorize = function(){
var self = this;
var orgDomain = self.urls.user.match(/https:\/\/([\w\d\.]+)/i)[0];
//console.log(orgDomain);
http.get(self.urls.user).catch(function(err){
if(err.statusCode == 401){
var toParse = err.response.headers['www-authenticate'];
var Oauth = toParse.match(/https:\/\/[\d\w\./_-]+/i)[0];
var loginPost = {
grant_type: 'password',
username: self.username,
password: self.password
};
return http.post(Oauth, {form:loginPost});
}
}).then(function(data){
if(data) {
var parsed = JSON.parse(data);
//setup authorization
http = http.defaults({
headers: {Authorization: parsed.token_type + ' ' + parsed.access_token}
});
return http.get(self.urls.user);
}
}).then(function(data){
//check for split-domain scenario
var parsed = JSON.parse(data);
var domain = parsed._links.self.href.match(/https:\/\/([\w\d\.]+)/i)[0];
console.log('[1] '+orgDomain);
console.log('[2] '+domain);
if(domain!== orgDomain){
//split domain scenario
self.urls.user = self.urls.user.replace(orgDomain, domain);
http = http.defaults({
headers: {Authorization: null}
});
self._authorize();
} else { //create app
var parsed = JSON.parse(data);
self.urls.applications = parsed._links.applications.href;
var registerApp = {
culture : "en-us",
endpointId : "2d9dc28d-4673-4035-825c-feb64be28e4e",
userAgent : "NodeJs client"
};
return http.post(self.urls.applications, {body: registerApp, json:true});
}
}).then(function(app){
console.log(app);
});
};
lync.setup = function(email, password){
var self = this;
var hostname = email.split('@');
this.username = email;
this.password = password;
//discover urls
return http.get('http://lyncdiscover.'+hostname[1])
.then(function(d) {
var parsed = JSON.parse(d);
self.urls = {
self: parsed._links.self.href,
user: parsed._links.user.href,
xframe: parsed._links.xframe.href
};
return self._authorize();
});
};
//run app
lync.setup('username@domain.com', 'password');
Я получал ту же ошибку до того, как добавил свой тестовый домен в список разрешенных доменов.
Это может быть обновлено через PowerShell, полная информация ниже:
Включение UCWA и настройка разрешенных доменов
У меня были клиенты, которые видели подобные ошибки при запуске моего кода с http://localhost/, их исправление состояло в том, чтобы проверить свой код на полном доменном имени (то есть http://testmyucwacode.mydomain.com/).