【问题标题】:Passing security context data between multiple security check在多个安全检查之间传递安全上下文数据
【发布时间】:2017-08-12 04:53:18
【问题描述】:

有没有办法在 IBM MobileFirst Platform 8.0 的 Java 适配器中的两个或多个安全检查之间传递安全数据(用户数据)

基本上,无论用户是否登录,我都需要调用我的适配器资源并产生响应。如果用户已登录,我需要获取用户特定数据,否则需要从后端获取一般信息。例如,当用户未登录时联系信息将是通用的,但如果他/她已登录,则特定于用户位置(用户的位置将根据身份验证数据从后端获取)。 因此,如果我保持我的适配器安全,那么如果未登录,适配器将引发 401 错误,如果我保持我的适配器不安全,那么当用户登录时,我将无法获取用户特定信息。

【问题讨论】:

    标签: java authentication oauth ibm-mobilefirst


    【解决方案1】:

    MobileFirst 不提供基于 OAuth 的基于安全性的模型 1. 从不受保护或不受保护的资源中访问基于安全或用户会话的信息 2. 使资源在运行时安全和不安全

    所以有两种选择可以实现需求 1.简单的方法是在同一个适配器中制作两个适配器或两个方法,一个启用OAuth,一个禁用OAuth,让移动应用程序决定调用哪一个 2. 如果我们只想使用一个适配器或方法,那么, i) 适配器或更具体地说,方法必须是 Un-protected 或仅使用 MobileFirst 的 Default_Scope 保护,因为在启动移动应用程序时通过了 MFP 的 Default_Scope 的安全检查 ii) 获取用户特定信息,如果用户从后端系统登录,类似于安全测试中使用的信息 iii) 使用用户特定信息获取用户特定数据

    通过执行上述步骤,适配器或特定 API 可以使用用户特定信息,即使其不受保护。由于您不会使用 MFP 开箱即用的安全模型,因此需要明确处理安全性并遵循所有安全措施,以确保用户信息的安全。

    【讨论】:

      【解决方案2】:

      在受保护的适配器方法中,您不能期望经过身份验证和未经身份验证的用户有两种不同的适配器响应。因为只有当客户端回答安全检查挑战时才能访问该方法。

      但是,您可以使用 getAuthenticatedUser API 在不受保护的适配器方法中实现它,您可以在其中区分经过身份验证和未经身份验证的用户并根据用户类型发回响应。

      并使用UserLogin 安全检查对用户进行身份验证。

      【讨论】:

      • 我试过了,我的发现是 1) 安全上下文不为空。 2) getAuthenticatedUser 始终为空,因为适配器不安全,因此即使用户未登录,当适配器不安全时,我也不能访问安全数据
      • @Harsh 您需要为此使用UserLogin 安全检查适配器,客户端应使用Login API 登录,之后每当客户端调用不安全方法时,getAuthenticatedUser 将返回登录的客户端详细信息,不会返回 null。
      • 重要的是,UserLogin 是否可用于 MFP 8.0 的开箱即用安全测试?当我使用 UserAuthenticatedSecurityCheck 类的“validateCredentials”方法验证用户信息时,我已经有一个自定义安全性。我在登录后尝试使用我的自定义安全性检查,但我仍然能够将 getAuthenticatedUser() 设为 null
      • @Harsh 好的,你能告诉我你的不受保护的方法在哪个范围内吗?它是默认值还是具有某些范围名称。如果您的未受保护方法的范围是默认值,它应该可以工作。
      • @Harsh 如果仍然无法正常工作,请分享未受保护的方法 sn-p where getAuthenticatedUser() API 总是返回 NULL。
      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2012-11-28
      • 1970-01-01
      • 2017-09-04
      • 2018-12-31
      相关资源
      最近更新 更多