Ibm mobilefirst MobileFirst OAuth和注销

Ibm mobilefirst MobileFirst OAuth和注销,ibm-mobilefirst,Ibm Mobilefirst,我有一个可以访问两个适配器的测试应用程序: 受引用域的SecurityTest保护的JavaScript适配器 一个Java适配器,其方法受对应于同一领域的OAuth范围保护 如果我遵循此顺序,一切都会按预期进行: 尝试访问JS适配器时,我会受到质疑,进行身份验证,获取数据 WL.Client.isUserAuthenticated()和WL.Client.getUserInfo()现在的行为符合预期 使用WL.Client.Logout()注销 WL.Client.isUserAuthenti

我有一个可以访问两个适配器的测试应用程序:

  • 受引用域的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()现在显示我没有经过身份验证
  • 但是对Java适配器的调用仍然有效,没有进一步的挑战
  • 对JS适配器的调用确实会导致挑战
  • 如果我在浏览器模拟器环境中运行,我可以使用以下命令销毁OAuth会话:

     localStorage.removeItem("com.worklight.oauth.idtoken")
    
    问题是:


    WL.Client.logout()方法是否应该破坏OAuth会话?如果不是,我应该使用什么API?

    对于OAuth,注销“工作”的方式不同。请参阅以下用户文档主题(搜索“注销”):

    登录/注销API:
    WLClient登录/注销API使用户能够 通过更新服务器端,登录和注销特定领域 安全状态。但是,在新的基于OAuth的安全模型中, 安全凭据也保存在客户端的访问令牌中 一边结果是,使用此API将导致不一致的 例如,客户端从服务器上的某个域注销的状态 服务器端,但仍保留服务器上该领域的有效令牌 客户端。为了解决这种不一致性,建议 使用重新获取访问令牌 成功登录后获取AuthorizationHeaderForScope方法,或 注销

    例如,考虑通过安全检查的客户端 Realm1和Realm2,然后调用logout(Realm2)。在这种情况下 客户端上的访问令牌仍将包含安全性 Realm1和Realm2的凭据,客户端可以使用 访问受保护资源的令牌。刷新令牌,即 仅获取Realm1的令牌,客户端调用 获取没有注销域Realm2的AuthorizationHeaderScope

    在JavaScript中,等效调用为:

     WLAuthorizationManager.obtainAuthorizationHeader("SomeRealm")
    

    并且有计划改进OAuth的注销体验。