我有一个访问两个适配器的测试应用程序:
- 由引用领域的 SecurityTest 保护的 JavaScript 适配器
- 一个 Java 适配器,其方法受与同一领域对应的 OAuth 范围保护。
如果我遵循这个顺序,一切都会按预期进行:
- 尝试访问 JS 适配器,我受到质询、身份验证、获取数据。
- WL.Client.isUserAuthenticated() 和 WL.Client.getUserInfo() 现在的行为符合预期
- 使用 WL.Client.logout() 注销
- WL.Client.isUserAuthenticated() 现在显示我未经过身份验证
- 正如预期的那样,第二次尝试访问 JS 适配器会导致另一个挑战。
然而,使用 Java 适配器 logout() 似乎没有按预期运行。
- 从没有会话开始,尝试访问 Java 适配器,挑战按预期发生,我获取了数据
- 我现在可以访问 JS 适配器而无需进一步的挑战,并且 WL.Client.getUserInfo() 调用给出了预期的结果。
- WL.Client.logout() 似乎有效,因为 WL.Client.isUserAuthenticated() 现在显示我未经过身份验证
-
But对 Java 适配器的调用仍然有效,无需进一步的挑战
- 对 JS 适配器的调用确实会带来挑战
如果我在浏览器模拟器环境中运行,我可以使用以下命令销毁 OAuth 会话:
localStorage.removeItem("com.worklight.oauth.idtoken")
问题是:
WL.Client.logout() 方法是否应该破坏 OAuth 会话?如果不是我应该使用什么 API?
对于 OAuth,注销的“工作方式”有所不同。请参阅以下用户文档主题(搜索“logout”):http://www-01.ibm.com/support/knowledgecenter/SSHS8R_7.0.0/com.ibm.worklight.dev.doc/dev/c_oauth_security_model.html?lang=en
登录/注销API:
WLClient 登录/注销 API 使用户能够
通过更新服务器端来登录和注销特定领域
安全状态。然而,在新的基于 OAuth 的安全模型中,
安全凭证也保存在客户端的访问令牌中
边。结果是使用这个API会导致不一致
例如,客户端从某个领域注销的状态
服务器端,但仍然持有该领域的有效令牌
客户端。为了解决这个不一致的问题,建议
重新获取访问令牌,通过使用
getAuthorizationHeaderForScope方法,登录成功后或者
登出。
例如,考虑通过安全检查的客户端
Realm1 和 Realm2,稍后调用 logout(Realm2)。在这种情况下,
客户端上的访问令牌仍然包含安全性
Realm1 和 Realm2 的凭据,客户端可以使用此凭据
访问受保护资源的令牌。刷新token,即
仅获取 Realm1 的令牌,客户端调用
getAuthorizationHeaderForScope 没有注销领域 Realm2。
在 JavaScript 中,等效的调用是:
WLAuthorizationManager.obtainAuthorizationHeader("SomeRealm")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)