gpt4 book ai didi

java - Spring boot 中匿名用户的 oAuth token

转载 作者:行者123 更新时间:2023-11-30 05:28:13 25 4
gpt4 key购买 nike

团队

使用 Spring boot,我能够完成工作流程,其中 oAuth 服务器可以为登录用户生成 token 。然而,oAuth 服务器如何为每个匿名用户生成唯一的 token 呢?

例如如果 2 个并发用户尝试从各自的浏览器访问资源服务器,那么我希望资源服务器在他们发出的每个后续请求中识别 2 个不同的用户。为此,我想为每个匿名用户生成不同的 token 。这可能吗?如果是的话怎么办?

最佳答案

本来很简单的事情,你把它搞复杂了。

I would like to generate different tokens for each anonymous user. Is that possible

一旦生成有效 token ,用户将成为经过身份验证的用户。

您可能会考虑验证 token 并设置ROLE='ROLE_ANONYMOUS'。正如我所说,这就像把简单的事情变得复杂一样。将经过身份验证的用户设置为匿名用户并不是一个好方法。您可以创建一个新角色,例如 ROLE_SEMIANONYMOUS 并授予对 ANONYMOUS 用户开放的权限。

(但这种方法对我来说没有任何意义,因此请解释替代方法来实现您识别 AnonymousUser 的要求)

作为“匿名用户=未经身份验证的用户”。

对于匿名用户,如果您打印主体

String principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

principal = “anonymousUser”

您可以为匿名用户创建一个 session 来识别他,如下所示

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();

if(principal instanceof String && ((String)principal).equalsIgnoreCase("anonymousUser"))
{
if(request.getSession(false) == null)
{
HttpSession session = request.getSession();
session.setMaxInactiveInterval(300); // As per Your requirement
// store session id from session and ip address from request in to DB or cache if required and use it
}
else
{
//identify anonymous user against session id and stored details
}
}

您可以通过注册过滤器来实现此目的

  • 按照传统的 spring 过滤器顺序,应该位于 springSecurityFilterChain 之后。
  • 在Spring Boot中可以通过FilterRegistrationBean来实现

关于java - Spring boot 中匿名用户的 oAuth token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58139284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com