【问题标题】:Worklight authentication error 401 after successfully IMC authentication成功 IMC 身份验证后 Worklight 身份验证错误 401
【发布时间】: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 中删除这个问题。

标签: android authentication ibm-mobilefirst basic-authentication worklight-security


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多