如何在 MobileFirst 8 中实现服务器会话验证场景?

How to implement server session validation scenario in MobileFirst 8?

我在使用 MobileFirst HTTP javascript 适配器的以下场景中遇到问题:

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

我们如何确保某些具有身份验证凭据并有权访问 retrieveData 的客户端将仅请求与他相关的数据,并且无法使用不同的 customer_id 发送 retrieveData 请求他自己? (我们假设此客户端已经对应用程序进行了调和并使其发送了不同的 customer_id。)

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

既然MobileFirst 8没有session,那么如何避免这种情况的发生呢?

在 v8.0 中,客户端能够从后端系统检索信息,因为它通过了向它提出的挑战,并且在 return 中收到了一个访问令牌,使它能够访问受保护的资源按您定义的范围。 OAuth 或多或少就是这样工作的。

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

在 8.0 中,"Client Registration Data" 是最接近会话的东西。

关于您的用例有很多未知数,但我会尝试描述大多数情况下的预期行为:

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

从那时起,在任何适配器上,您都可以使用 securityContext.getAuthenticatedUser().

安全地检查谁是当前登录的用户

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

如果您真的需要在注册上下文中存储额外的自定义数据(最接近会话对象的东西),安全检查中的 API 可以做到这一点。参见 RegistrationContext