购物车服务和身份验证

问题描述 投票:0回答:1

我注意到,如果您访问在线商店,它允许您在未经授权的情况下查看产品并将其添加到购物车。我想我可以实现这一点,例如,通过在配置中添加 anyRequest().permitAll() (我不知道这是否是正确的方法,我只是在学习编程)。但是我不太明白授权后我的购物车是怎么保存的?

我使用 Keycloak 来获取和验证令牌。我尝试了授权代码流和客户端凭据。但是我如何在 userId 和 cartId 之间链接。

一开始我打算将 userId 字段插入到 Cart 中,但是在我登录之前这个字段没有任何意义。然后我想起了消息代理,一瞬间我想到也许 Keycloak 会通过传递来发送授权消息userId,Cart-Service 会订阅想要的主题并填写 userId 字段,但这是一些废话,我如何理解哪个 userId 对应哪个 cartId。

我应该总是在这里使用会话(也许是 Spring Session)还是......?我听说 JWT 是会话的替代方案,但它们总是需要授权,这是合乎逻辑的。

我脑子一片混乱,我只是在积累经验,请帮助我。

spring session e-commerce cart shopping-cart
1个回答
0
投票

购物车状态位于前端:基于 Javascript 的应用程序(Angular、React、Vue 等)的浏览器内存中或服务器端渲染应用程序(Thymeleaf、JSP 等)的服务器内存(会话)中。如果应在会话之间保存购物车状态,它也可能保存在 cookie 中。

此购物车状态完全独立于用户身份验证状态。

用户通过身份验证(使用 client_credentials)后,您可以从访问和 ID 令牌声明中获取用户 ID,并将其与购物车 ID 关联。

Subject 是一个很好的用户 ID 候选者,但当它们在授权服务器 (Keycloak) 上配置为唯一且不为空时,您也可以使用电子邮件或

preferred_username

JWT 不能替代会话。您可以摆脱 OAuth2 资源服务器上的会话(使用 JWT 解码器或令牌自省进行配置),但 OAuth2 资源服务器只能由 OAuth2 客户端使用,并且在服务器上运行的 OAuth2 客户端需要会话(会话由客户端等使用)事物,在请求之间存储令牌)。由于现在不鼓励将基于 Javascript 的应用程序配置为 OAuth2 公共客户端,而转而采用 BFF 模式(服务器上的中间件配置为 OAuth2 机密客户端),因此您需要此 BFF 上的会话才能使 OAuth2 正常工作。请注意,此会话使用情况与您的购物车不直接相关:如上所述,会话中的购物车状态仅适用于服务器端呈现的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.