【问题标题】:UCWA Lync authentication - 500 web ticket is invalidUCWA Lync 身份验证 - 500 网络票证无效
【发布时间】:2015-01-25 14:15:13
【问题描述】:

我正在尝试使用 Nodejs 为 Lync 创建一个简单的客户端。 基于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":{ “自我”:{“href”:“链接”}, “应用程序”:{“href”:“我需要这个”}, “xframe”:{“href”:“链接”} } }

现在。我需要“注册我的应用程序”做 POST。 在这最后一步中,我得到 500 个代码响应。 我希望这与@Matthew Proctor 所说的无关。 因为我不能简单地管理服务器

【问题讨论】:

  • 了解对 /Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=domain.com 的 GET 请求的响应 JSON 中包含的内容以及 URL 的域部分是否与响应匹配将有助于确定您是否被重定向到原始 OAuth 令牌无效的其他 Lync 池。根据您当前的信息,这是最有意义的方向,但缺少上下文(导致您看到 500 响应的网络流量)。

标签: node.js lync ucwa


【解决方案1】:

谢谢@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');

【讨论】:

    【解决方案2】:

    在将测试域添加到允许域列表之前,我遇到了同样的错误。

    这可以通过 PowerShell 进行更新,详细信息如下:

    Enabling UCWA and Configuring Allowed Domains

    我有客户在从http://localhost/ 运行我的代码时看到类似的错误,他们的解决方法是在 FQDN(即http://testmyucwacode.mydomain.com/)上测试他们的代码。

    【讨论】:

    • 使用 node.js 将绕过使用添加 X-Ms-Origin 标头的 xframe 的需要。当该标头不存在时,无法对跨域授权列表进行检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多