如何在 Spring Security 5 中进行未经身份验证的授权

Posted

技术标签:

【中文标题】如何在 Spring Security 5 中进行未经身份验证的授权【英文标题】:How to do authorization without authentication in Spring Security 5 【发布时间】:2020-11-02 15:01:45 【问题描述】:

我是 Spring Security 的新手。我正在尝试将 Spring Security 集成到我的 Web 应用程序中。

我们有自己的身份验证流程,无法修改。然而,一旦用户成功完成了这个过程,它就会被加载到会话中,包括角色。

我们试图实现的是利用这些信息来进行 Spring Security 的授权过程,也就是说,强制它从用户会话中获取角色,而不是通过 authentication-provider 来获取。

有没有办法在 Spring Security 5 中实现这一点?

【问题讨论】:

【参考方案1】:

这应该可行。只需配置您的 spring 安全性,因为您将使用 http 基本身份验证。

然后在您完成自定义登录时,设置此项,以便 Spring 安全性可用于授权。

Authentication authentication = new 
    UsernamePasswordAuthenticationToken("username", null, authoritiesOfUser);
SecurityContextHolder.getContext().setAuthentication(authentication);
HttpSession session = req.getSession(true);
session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, 
                     SecurityContextHolder.getContext()); 

Spring security 有一个名为SecurityContextPersistenceFilter 的过滤器,它会自动获取您在上面设置的内容,使用自己的密钥将其放入 http 会话中,然后在后续请求中重新填充 SecurityContextHolder.getContext()

【讨论】:

以上是关于如何在 Spring Security 5 中进行未经身份验证的授权的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security 5 和 OAuth2 Client 获取刷新令牌并进行 API 调用?

如何在 Spring webflux 应用程序中使用 Spring WebSessionIdResolver 和 Spring Security 5?

在项目中使用Spring Security进行权限控制

spring-security saml2:如何获取当前用户?

使用 Spring Boot 2 和 Spring Security 5 进行多因素身份验证

如何在单元测试中针对 Spring Security 对用户进行身份验证