成功 IMC 身份验证后 Worklight 身份验证错误 401

Posted

技术标签:

【中文标题】成功 IMC 身份验证后 Worklight 身份验证错误 401【英文标题】:Worklight authentication error 401 after successfully IMC authentication 【发布时间】:2015-01-18 19:16:31 【问题描述】:

我使用此代码通过 IMC 服务器并验证我的 WL 6.2 服务器(WL 服务器不需要任何身份验证)。

PADMAppRealmChallengeHandler.loginToImc = function (userid, password)

PADMAppRealmChallengeHandler.writeMessage("Authenticating with w3 IMC server ...");
PADMAppRealmChallengeHandler.writeMessage("Called loginToImc ...");

if (byPassIMC)



else

    base64uid = window.btoa(userid + ":" + password);

    // var WgSessionKey = WLJQ.cookie("WgSessionKey");
    alert("Cookies are: " + document.cookie );
    // alert("WgSessionKey=" + WgSessionKey);
    WLJQ.ajax(
        url: IMCURL,
        method: "get",
        async: false,
        cache : false, 
        crossDomain  : true ,
        headers : 
            "Authorization": "Basic " + base64uid 
            //,  "Cookie" : "WgSessionKey=XXXXX"
        ,
        dataType: "text",
        error: function(jqXHR, status, error) 
            console.log("status =" + status + " error=" + error);
            console.log(jqXHR);
            console.log("AllResponseHeaders");
            console.log("================================");
            console.log( jqXHR.getAllResponseHeaders() );
            PADMAppRealmChallengeHandler.writeError("Failed to authenticate. Please try again later");
            console.log("============== error responseText ==================");
            console.log( jqXHR.responseText);
            console.log("================================");

            PADMAppRealmChallengeHandler.setBusy(false);
        ,
        timeout: 12000,
        success : function(data, textStatus, jqXHR) 
            console.log("================================");
            PADMAppRealmChallengeHandler.writeMessage("IMC SUCC ");
            console.log("================================");

            console.log(jqXHR);
            console.log("AllResponseHeaders");
            console.log("================================");
            console.log( jqXHR.getAllResponseHeaders() );
            console.log(data);
            console.log("================================");


            var SetCookies = jqXHR.getResponseHeader('Set-Cookie');
            // alert("SetCookies=" + SetCookies );


            console.log("============== success responseText ==================");
            console.log( jqXHR.responseText);
            console.log("================================");

            // if (data == "Success!!") 
            if (data) 
            
                var options = 
                
                        onSuccess: function(e)
                        
                            PADMAppRealmChallengeHandler.writeMessage("Workligth Connect + IMC SUCC ");
                            PADMAppRealmChallengeHandler.writeMessage(JSON.stringify(e));
                            PADMAppRealmChallengeHandler.setBusy(false);
                            return;
                        ,
                        onFailure: function(e)
                        

                            PADMAppRealmChallengeHandler.writeError("Failed to authenticate with Worklight. Please try again later");
                            PADMAppRealmChallengeHandler.setBusy(false);
                            alert("Error with Workligth server " + JSON.stringify(e));
                        
                ;

                console.log("Run WL.Client.connect(options); ");
                WL.Client.connect(options);
             else 
                PADMAppRealmChallengeHandler.writeError("The user ID or password entered is incorrect");
                alert("Failed to login on IMC server, verify your user and/or password please !!");
                PADMAppRealmChallengeHandler.setBusy(false);
            
        
    );


;

在一个好的 ajax get 请求之后,WL.client.connect() 请求被 IMC 拒绝,错误 401 .. unauthenticate.

问题发生在

WL 工作室 |安卓 | ios

v6.3 |错误 401 |未测试

v6.2 |错误 410 |工作!

v6.1 |工作坊 |未测试

v5.X |作品 |未测试

问题似乎是由于 Set-Cookie WgSessionKey 没有被 WL 框架捕获。它只发生在 android 上。这似乎是 Android 上 WL 6.2 中引入的一个错误

【问题讨论】:

已为此问题注册了一个 PMR。这将在 PMR 中继续 - 我建议从 Stack Overflow 中删除这个问题。 【参考方案1】:

在 Worklight 6.2 中,没有公开支持的访问 Android cookie 存储的方式。这是平台的已知限制。

向用户提供了一种替代的、未记录的、不受支持的方法以解决该问题:var req=new WLJSX.Ajax.WLRequest( ... 而不是WLJQ.ajax( ...

计划在未来的版本中通过公共 API 添加适当的 Android cookie 存储支持。然后就可以注入任何需要的东西......

【讨论】:

以上是关于成功 IMC 身份验证后 Worklight 身份验证错误 401的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight:WL.Client.getUserName 无法在身份验证后立即检索 userIdentity

IBM Worklight 6.0 - 启用控制台登录身份验证后混合端口号?

基于 IBM Worklight 适配器的身份验证

IBM Worklight 6.0 - 如果客户端注销/登录,具有基本身份验证的适配器不会更新身份验证标头

IBM Worklight - 调试 Worklight 身份验证器和/或登录模块

从 Worklight 向域进行身份验证