首页 > 解决方案 > 一旦用户通过身份验证并且在授权他使用端点之前,更新 Authentication 对象中的权限

问题描述

我有一种情况,我必须根据用户的角色授权用户访问特定路径(端点)。问题:一旦用户通过身份验证,我会在身份验证对象中看到一组空的权限(授权过滤器使用它来确定用户的访问权限。)

我是 Spring Security 的新手,需要帮助来解决这个问题。

背景:我们在组织中实现了一个授权服务器,它使用 oauth2 并让我们进行单点登录。SSO 发生在前端,它从授权服务器获取令牌并将其嵌入到发送到我的服务器的每个请求中。现在我的服务器解码令牌并对用户进行身份验证。用户声明没有权限信息,我不允许在我的授权服务器中进行任何代码更改..

我在寻找什么:一旦用户通过身份验证并且在他进行授权之前(我在我的网络安全配置中使用过滤器),我想调用数据库并获取用户各自的角色并将其保存到我的身份验证对象,因此现在更新了权限,用户将被授权到端点。

标签: springspring-bootauthenticationspring-securityauthorization

解决方案


您可以创建一个并从注释中SecurityService调用它@PreAuthorize

@GetMapping()
@PreAuthorize("securityService.hasRole('ADMIN', authentication.principal.username)")
public String getData() {
  return "response";
}

并使用 rest 模板从 SecurityService 调用授权服务器,例如:

public class SecurityService {

  public boolean hasRole(String role, String username) {
    String role = restTemplate.getRoleByUserName...;
    // check role 
    return false/true
  } 
}

推荐阅读