成功 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 6.0 - 如果客户端注销/登录,具有基本身份验证的适配器不会更新身份验证标头