IBM MobileFirst Platform Foundation 7 - 适配器身份验证 - 更新用户身份属性
Posted
技术标签:
【中文标题】IBM MobileFirst Platform Foundation 7 - 适配器身份验证 - 更新用户身份属性【英文标题】:IBM MobileFirst Platform Foundation 7 - Adapter authentication - Update the user identity attributes 【发布时间】:2015-09-09 10:36:13 【问题描述】:我正在使用基于适配器的身份验证来保护资源以及管理整个身份验证逻辑(凭据验证)。
如果用户/密码验证成功通过,则调用 WL.Server.setActiveUser
方法为 Realm 创建一个经过身份验证的会话,用户数据存储在 userIdentity 对象中。
如果验证通过,用户/密码验证过程将返回 OK/Fail 和 cookie。这个 cookie 应该在以下适配器调用中发送,所以我也将它添加到 userIdentity 数据对象中。
我的想法是将它存储在 userIdentity 对象中,因为可以在其他适配器 (var userIdentity = WL.Server.getActiveUser();
) 上检索它,以便将 cookie 值添加到适配器的请求标头中并且它可以正常工作!
有什么问题?适配器响应可以包含此 cookie 的新值,因此我应该更新 userIdentity 对象以用新值替换 cookie 的旧值。 不过,userIdentity 对象是不可变的,因此它始终包含登录过程获得的原始 cookie。
有没有办法更新 userIdentity 对象?否则,如何管理可变表以保存和更新链接到每个用户会话的 cookie,以便在适配器请求中将其发送到后端?
有没有更好的方法来管理每个用户适配器请求所需的后端 cookie?
非常感谢! 塞尔吉
PS:有一个问题试图解决这个问题,但可能的答案对我无效(IBM MobileFirst Platform Foundation 6.3: Can we edit the custom attributes of User Identity Object [MobileFirst Session]): 我尝试了以下代码来更新用户身份:
var newUserIdentity =
userId: userIdentity.userId,
attributes:
cookies: newValue
;
WL.Server.setActiveUser(realm, null);
WL.Server.setActiveUser(realm, newUserIdentity);
但是当它从另一个适配器 (var userIdentity = WL.Server.getActiveUser()
) 检索时,它包含原始值!
【问题讨论】:
为什么链接的问题对您无效? 问题中添加了说明。 我尝试直接管理cookie,但没有成功***.com/questions/28753979/… 【参考方案1】:您可以删除 userIdentity (WL.Server.setActiveUser("realm", null);
),然后设置一个新的活动用户对象。
如果您可以依赖 HTTP 会话(单服务器或粘性会话),您可以访问会话对象并存储您想要的任何内容。 (WL.Server.getClientRequest().getSession()
)
如果您不想使用 HTTP 会话,可以使用 SQL 或 Cloudant 等外部存储机制来存储该信息。您可以使用 Client-ID 作为标识符(参见示例 https://ibm.biz/BdXUHt)。
【讨论】:
谢谢内森! 1)这对我来说似乎不起作用,我在问题的末尾添加了我用来测试它的代码。 2)你可以分享一个样品的链接吗?您是指使用org.apache.http.client.methods.HttpGet
类进行每个适配器调用吗?我想保持适配器简单,使用WL.Server.invokeHttp(input)
。 3) 我希望前面的选项可以防止使用外部存储机制。
我没有 (2) 的示例,但您可以使用 WL.Server.getClientRequest().getSession()
获取会话对象,然后在该对象上执行 setAttribute
和 getAttribute
。跨度>
谢谢,我要试试这个解决方案!
谢谢,内森。 HTTP Session 对象解决了我的问题。以上是关于IBM MobileFirst Platform Foundation 7 - 适配器身份验证 - 更新用户身份属性的主要内容,如果未能解决你的问题,请参考以下文章
IBM MobileFirst Platform Operations Console:找不到运行时
Apache Cordova 和 IBM MobileFirst Platform 有啥区别
使用 Ionic 开发 IBM MobileFirst Platform 混合应用程序
在 IBM MobileFirst Platform 上获取位置时出错