2016-08-24 33 views
1

我使用MobileFirst HTTP的JavaScript适配器具有以下情形的一个问题:如何在MobileFirst 8中实现服务器会话验证方案?

假设适配器调用2种方法,

  • 登录,调用该验证用户后端服务,也可以返回customer_id(输入:用户名和密码)。
  • retrieveData(受安全检查保护)通过调用后端服务(输入:customer_id)来检索有关客户的敏感数据。

我们怎样才能确保某些客户端有凭据进行身份验证和访问retrieveData,将请求仅在关心他,不能够发送一个请求STO retrieveData与自己不同的CUSTOMER_ID的数据? (我们假设这个客户端已经与应用程序调和,并已发送不同的customer_id的。)

随着MobileFirst 7,登录成功后,我们将调用setActiveUser设置返回的customer_id作为活跃用户的属性,或者我们会调用WL.Server.getClientRequest()。getSession()。setAttribute并再次设置customer_id。因此,当用户调用retrieveData时,我们会将他的customer_id输入并将其与他的会话中的customer_id进行比较。如果不同,那么他们会得到一个错误,因为他们请求的数据不属于他们。

由于MobileFirst 8没有会话,我们如何防止这种情况发生?

+0

用户名和客户ID之间的关系是什么?这个关系是如何存储的? –

+0

客户使用用户名和密码登录,并且登录后端过程返回唯一的customerId(每个客户一个,在注册时创建并且永不改变)。出于安全原因,此customerId从未到达客户端应用程序。 – papakias

+0

你的意思是他们每次登录时都会得到一个不同的客户ID?或者你是否存储在某些持久性存储中,如数据库?我的意思是,您的“retrieveData”使用客户ID作为输入,它如何知道使用此ID检索哪些数据? –

回答

1

在8.0中,“客户注册数据”与会话最接近。

有很多关于你的使用情况未知的,但我会尽力来形容了预期的行为大多数情况下:

假设你的安全检查扩展UserAuthenticationSecurityCheck,只要用户成功登录,他的用户id将被注册在服务器上的客户端注册数据中。这将把客户端映射到数据库中的用户。

从此时起,在任何适配器上,您都可以通过使用securityContext.getAuthenticatedUser()安全地检查当前登录的用户是谁。

如果要确保客户端只访问允许的数据,请使用此getAuthenticatedUser来检查数据库所请求的数据是否属于该数据库。

如果您确实需要在注册上下文(最接近会话对象)中存储额外的自定义数据,那么在安全检查中会有API来执行此操作。请参阅RegistrationContext

+0

是的,这似乎接近我所寻找的。我希望它的作品.. – papakias

+0

我也看到上面在您发送给我的那个页面void setActiveUser(AuthenticatedUser user)仍然存在?那不是中止?如果不是,那么它也会做这个工作。 – papakias

+1

它仍然存在于安全检查中。但是如果你实现了像上面提到的和链接的'UserAuthenticationSecurityCheck',这部分是自动为你完成的。我强烈建议使用'UserAuthenticationSecurityCheck'。 –

0

v8.0中,客户端能够检索来自后端系统的信息,因为它通过了提交给它的挑战,并在收到回报的访问令牌,它能够由一个范围保护访问资源,你定义。这就是OAuth的工作原理。

您是否阅读过认证概念教程? https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/

+0

是的,我有。我的场景是关于一个恶意用户,他已经有一个密码和用户名(因此他通过了这个挑战),但是发送了一个缓和的customerId给受保护的过程并且检索另一个客户的数据。为了阻止这一点,我们将使用服务器会话。我们现在怎么能阻止它? – papakias

相关问题