当前位置: 首页 > 知识库问答 >
问题:

REST API、oAuth2、Spring Security性和角色

陆俊迈
2023-03-14

在我的应用程序中,我实现了oauth2AuthorizationServer和ResourceServer。我的系统中的每个用户都有一组他的角色(权限)。

我想用oauth2和基于用户角色的安全性来保护我的Spring MVC RESTendpoint。

private final static class DBUserDetails extends User implements UserDetails {

    private static final long serialVersionUID = 1L;

    private DBUserDetails(User user) {
        super(user);
    }

    public Collection<? extends GrantedAuthority> getAuthorities() {
        return AuthorityUtils.createAuthorityList("ROLE_USER");
    }

    public String getUsername() {
        return getName();
    }

    public boolean isAccountNonExpired() {
        return true;
    }

    public boolean isAccountNonLocked() {
        return true;
    }

    public boolean isCredentialsNonExpired() {
        return true;
    }

    public boolean isEnabled() {
        return true;
    }

}

而且

@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources
            .resourceId(RESOURCE_ID);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/profile/*").hasRole("PERMISSION_ADMIN")                      
                .and().csrf()
                .disable().sessionManagement().sessionCreationPolicy(STATELESS);
    }

}  



@RestController
@RequestMapping("/api/v1.0/profile")
public class ProfileController {

    @PreAuthorize("hasRole('PERMISSION_ADMIN')")
    @RequestMapping("/currentUser")
    public User currentUser(@AuthenticationPrincipal User user) {
        return user;
    }

}

我希望使用具有permission_admin的用户保护/profile/*路径。但现在任何具有accessToken的人都可以访问此endpoint。我错在哪里?

共有1个答案

周翰
2023-03-14

我想您可以在您的ResourceServerConfiguration中为我使用OAuth2SecurityExpressionMethods它的工作原理如下:

http
.requestMatchers().antMatchers("/oauth/api")
.and()
.authorizeRequests()
.antMatchers("/oauth/api").access("#oauth2.hasRole('ADMIN')")...
 类似资料:
  • 我试图在一个带有spring security和KeyClope的java应用程序中同时使用领域和资源角色。不幸的是,KeyClope只会返回一个或另一个,具体取决于: 您仍然可以通过自定义代码获得这两种方法,但它会弄乱@PreAuthorize或spring boot方法等注释。isUserInRole,这会导致难看的代码。 有没有办法覆盖@PreAuthorize方法或JSON令牌Keyclo

  • 我们尝试使用用户访问控制实现 RestAPI,其中相同的 URI 应为具有不同角色的两个用户返回不同的响应。比如说,对 URI 的响应(/resource/123) 如何根据角色隐藏每个属性。 隐藏用户不应访问的节点 问题:这会破坏响应结构。客户端可能会中断,因为预期的节点会被遗漏。 为该节点返回 null。 问题:这将破坏响应数据类型。因为“布尔”节点将具有空值。 返回该节点的默认值。 问题:这

  • 我试图用RESTAPI实现Spring Security性,并作为前端进行响应,因为这是我的第一个完整堆栈开发项目,我对如何实现正确的身份验证机制一无所知。 我已经搜索了很多,找到了关于Spring Security with Basic Auth的文章,但我无法弄清楚如何将该身份验证转换为其他api,然后通过会话/cookie进行管理。即使我得到的任何github引用都很旧,或者它们还没有完全迁

  • 我在这里有很多问题要解决。一直试图将上述3项技术集成到我们的WebApp中…我们要使用 null web.xml: 我的servlet-context.xml: My manager-context.xml: 编辑2 我认为主要的问题是SpringSecurity需要webapp上下文(ContextLoaderListener)才能工作,但web应用程序是在servlet上下文中运行的。控制器方

  • 我尝试了以下方法:url=“https://{localhost}/auth/admin/realms/{realm_name}/groups/{group_id}/role mappings”payload=[{“id”:“role_id”,“name”:“role_name”,“composite”:“false”,“clientRole”:“true”,“containerId”:“clie

  • 本文向大家介绍springboot集成springsecurity 使用OAUTH2做权限管理的教程,包括了springboot集成springsecurity 使用OAUTH2做权限管理的教程的使用技巧和注意事项,需要的朋友参考一下 Spring Security OAuth2 主要配置,注意application.yml最后的配置resource filter顺序配置,不然会能获取token但