2015-01-25 2 views
1

Nodejs를 사용하여 Lync 용 간단한 클라이언트를 만들려고합니다. 자료에 http://ucwa.lync.com/documentation/KeyTasks-CreateApplication 나는 이런 식으로 만들었습니다. 내 앱을 UCWA에 등록해야하는 마지막 단계 # 9까지 작동합니다. 서버는 당신이 찾고있는 리소스에 문제가 있습니다 코드 (500)와 바보 설명UCWA Lync 인증 - 500 웹 티켓이 잘못되었습니다.

로 응답, 그리고

그리고 헤더

X-MS-진단을 표시 할 수 없습니다 ':'28032; 소스 = "MYSOURCE"; 이유 =는 "웹 티켓이 잘못되었습니다." '

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('[email protected]', 'password').then(function(ret){ 

}); 

하나의 요점은 여기에 있습니다. 내 서버가 아니야. 저기 계신 계정이있어서 공식 Lync 클라이언트 또는 Pidgin 플러그인으로 로그인 할 수 있습니다. 내 앱이 UCWA와 함께 작동하도록 "허용"하는 몇 가지 추가 단계가 있습니까?

@ShelbyZ Oauth를 사용하면 쉽게 인증 할 수 있습니다. 나는 그래서 로그인하고있어 토큰 인증을 받고있어

내가

"_links"유사 JSON을 수신 해요 :. { "자기": { "HREF": "링크"}, "응용 프로그램"

이제 }} : { "링크" "HREF"}, "xframe을": { "HREF" "이 필요합니다"}. POST를하는 "응용 프로그램 등록"이 필요합니다. 이 마지막 단계에서 나는 500 코드 응답을 얻는다. 그와 관련이 없기를 바랍니다. @ Matthew Proctor가 말했습니다. 서버를 간단하게 관리 할 수 ​​없어서

+1

예를 들어 URL의 도메인 부분 일치하는 응답은 원본 OAuth 토큰이 유효하지 않은 다른 Lync 풀로 리디렉션되는지 확인하는 데 도움이됩니다. 가장 합리적인 방향 인 현재 정보를 기반으로하지만 500 응답을 보는 지점까지 이어지는 네트워크 트래픽이 부족합니다. – ShelbyZ

답변

0

테스트 도메인을 허용 된 도메인 목록에 추가하기 전에 동일한 오류가 발생했습니다.

이 PowerShell을 통해 업데이트 할 수 있습니다, 자세한 내용 아래 :

Enabling UCWA and Configuring Allowed Domains

나는 http://localhost/에서 내 코드를 실행할 때 클라이언트가 유사한 오류가 표시 했어, 자신의 수정 (A FQDN에 자신의 코드를 테스트하는 것이 었습니다 즉 http://testmyucwacode.mydomain.com/).

+0

node.js를 사용하면 X-Ms-Origin 헤더가 추가 된 xframe을 사용할 필요가 없어집니다.해당 헤더가 없으면 도메인 간 권한 부여리스트에 대해 점검 할 수 없습니다. – ShelbyZ

2

감사합니다. @ ShelbyZ 당신이 맞았습니다, 그것은 도메인 분할 시나리오였습니다. 이제 권한 부여가 작동하고 앱을 등록 할 수 있습니다. 또한 /Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=domain.com과 경우 GET 요청에 대한 응답 JSON에 포함 된 알면 미래 세대

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('[email protected]', 'password'); 
관련 문제