Java 在多个安全检查之间传递安全上下文数据

Java 在多个安全检查之间传递安全上下文数据,java,authentication,oauth,ibm-mobilefirst,Java,Authentication,Oauth,Ibm Mobilefirst,在IBM MobileFirst Platform 8.0的Java适配器中,是否有一种在两个或多个安全检查之间传递安全数据(用户数据)的方法 基本上,我需要调用我的适配器资源并生成响应,无论用户是否登录。若用户已登录,我需要获取特定于用户的数据,否则需要从后端获取一般信息。例如,当用户未登录时,联系信息将是通用的,但如果用户已登录,则特定于用户位置(将根据身份验证数据从后端获取用户位置)。 因此,如果我保持适配器的安全,那么适配器将在未登录时抛出401错误;如果我保持适配器的安全,那么当用户登

在IBM MobileFirst Platform 8.0的Java适配器中,是否有一种在两个或多个安全检查之间传递安全数据(用户数据)的方法

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

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

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


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

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

因此,有两种选择来实现需求 1.简单易行的方法是在同一个适配器中设置两个适配器或两个方法,一个启用OAuth,一个禁用OAuth,然后让移动应用程序决定调用哪一个 2.如果我们只想使用一个适配器或方法, i) 适配器,或者更具体地说,方法必须不受保护,或者仅使用MobileFirst的默认\u范围进行保护,因为在启动移动应用程序时,MFP的默认\u范围的安全检查已通过 ii)如果用户从后端系统登录,则获取用户特定信息,类似于安全测试中使用的信息 iii)使用特定于用户的信息获取特定于用户的数据


通过执行上述步骤,即使适配器或特定API不安全,也可以使用特定于用户的信息。由于您不打算使用MFP的现成安全模型,因此需要明确处理安全问题,并且必须遵循所有安全措施,以确保用户信息的安全。

我尝试了这一点,发现1)安全上下文不为空。2) getAuthenticatedUser始终为空,因为适配器是不安全的,所以,即使用户未登录,当适配器不安全时,我也无法访问安全数据in@Harsh您需要为此使用
UserLogin
安全检查适配器,客户端应使用
login
API登录,之后每当客户端调用不安全的方法时,
getAuthenticatedUser
将返回登录的客户端详细信息,且不会返回null。Vittal,UserLogin是否可用于MFP 8.0的开箱即用安全测试?当我使用UserAuthenticatedSecurityCheck”类的“validateCredentials”方法验证用户信息时,我已经有了自定义安全性。我在使用自定义安全性检查登录后尝试过,但仍然能够获得getAuthenticatedUser()无效only@Harsh好的,你能告诉我你的不受保护的方法的作用域是哪个吗?它是默认的还是有一些作用域名称。如果你的不受保护的方法的作用域是默认的,它应该可以工作。@如果它仍然不工作,请共享不受保护的方法片段,其中
getAuthenticatedUser()
API始终返回NULL。