Spring oauth2 hasRole 访问被拒绝

2024-02-03

我对 OAuth2 非常陌生,并尝试在角色 auth.server 中构建一台服务器来授权用户,并构建一台保留受保护资源的服务器......

我在使用 ResourceServerConfigurerAdapter 时遇到了一些问题。看起来他忽略了从 userInfoUrl 获取的所有角色......

所以这里的代码:

认证服务器

@SpringBootApplication
@EnableAuthorizationServer
@EnableResourceServer
@RestController
public class Oa2AuthServerApplication {

    @RequestMapping("/user")
    public Principal user(Principal user) {
        return user;
    }
    public static void main(String[] args) {
        SpringApplication.run(Oa2AuthServerApplication.class, args);
    }
}

__

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin")
                .password("admin")
                .roles("ADMIN", "USER")
                .and()
                .withUser("user")
                .password("user")
                .roles("USER");
    }
}

__

@Configuration
public class OA2AuthConfig extends AuthorizationServerConfigurerAdapter {
    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("default")
                .secret("kx")
                .scopes("AUTH", "TRUST")
                .autoApprove(true)
                .authorities("ROLE_GUEST", "ROLE_USER", "ROLE_ADMIN")
                .authorizedGrantTypes("authorization_code", "implicit", "refresh_token");
    }
}

资源服务器

@SpringBootApplication
@RestController
@EnableResourceServer
public class Oa2ResourceServerApplication {
    @RequestMapping("/")
    public String greet() {
        return UUID.randomUUID().toString() + "\r\n";
    }

    @RequestMapping("/forAdmin")
    public String admin() {
        return "hi admin!";
    }


    public static void main(String[] args) {
        SpringApplication.run(Oa2ResourceServerApplication.class, args);
    }
}

因此,从 authserver 获取令牌 + 调用“localhost:9091/”和“/forAdmin”可以使用此令牌。

但是当我这样做时:

public class WebSecurityConfig extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/forAdmin").hasRole("USER");
    }

我的访问被拒绝....

可以肯定的是,角色正在到达资源服务器,我已将上面的 foot() 更改为

@RequestMapping("/")
    public String greet(Principal user) {
        if (user instanceof OAuth2Authentication) {
            log.info("having roles: {}", ((OAuth2Authentication) user).getAuthorities());
        }
        return UUID.randomUUID().toString() + "\r\n";
    }

控制台显示

d.k.auth.Oa2ResourceServerApplication :具有角色:[{authority=ROLE_USER}]

因此,当“Principal”是当前经过身份验证的用户时,我认为资源服务器配置程序存在错误......或者我正在做一些致命的错误......

或者两者......我不知道

有人可以帮助我解决这个问题吗?


所以JWT是必要的,没有它不行。

我用组合解决了它:

@PreAuthorize("#oauth2.hasScope('openid') and hasRole('ROLE_ADMIN')")

您可以找到受保护资源的示例here https://github.com/mavogel/uaa-behind-zuul-sample/blob/master/dummy-service/src/main/java/com/kakawait/DummyServiceApplication.java.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring oauth2 hasRole 访问被拒绝 的相关文章

随机推荐

  • 使用 LINQ 确定序列不包含元素[重复]

    这个问题在这里已经有答案了 可能的重复 LINQ 最大还是默认 https stackoverflow com questions 341264 linq max or default 我有一些 LINQ 需要过滤DateTime vars
  • 删除行后留下的 FILESTREAM 文件

    我已经在我的 SQL 2008 服务器上成功设置了 FILESTREAM 但是我注意到 即使我删除了包含 FILESTREAM 数据的行 物理数据文件似乎也没有被删除 我所说的物理文件是指 SQLServer 托管目录中以唯一标识符作为文件
  • 将 PIL.Image 转换为 skimage

    我的项目中有 2 个模块 第一个模块以字节格式处理图像 第二个模块需要 skimage 对象 我需要将它们结合起来 我有这个代码 import io from PIL import Image import skimage io area
  • KnockoutJS css 绑定 != true

    我的视图模型正在返回truevalue 我正在尝试让我的模板相应地添加 CSS 问题是 我找不到 a true 的语法 我有这样的事情 div div 我想会说 如果选中 true 则应用 lw touched 如果选中 false 则应用
  • 行边框颜色

    我想设置边框 tr 至黄色 我可以设置边界 td 但不知道如何设置行边框 tr 这个怎么做 Thanks 这个例子 http jsfiddle net yahavbr a5TyU 在 IE8 Chrome 9 和 Firefox 3 6 上
  • Rubaxa Sortable 如何获取项目数组

    我知道这很明显 但我无法弄清楚 我正在使用 Rubaxa sortable 并且希望在添加 删除项目或对列表进行排序时使用 ajax 更新我的数据库 var editableList Sortable create document get
  • Prolog-映射(关联数组)

    我正在学习序言 想知道是否有人指导我如何做这个问题 这是这个领域的许多问题中的第一个 知道如何做这个问题将真正帮助我进步 先感谢您 使用 Prolog 定义一个谓词 mapof K M V 这样 当 K 实例化为键 M 实例化为映射而调用时
  • 使用 fetch API 时在 AJAX 调用期间显示微调器

    在我的项目中 我正在迁移到 React 因此不加载 JQuery 由于我不再使用 JQuery 因此对于 AJAX 调用我使用 fetch 使用 JQuery 我可以挂钩 AJAX 调用的开始和结束 因此可以非常轻松地将光标更改为微调器 我
  • 如何在 Design Automation API 中创建数据转换活动?

    我正在制作一个 Web 服务原型 以使用 Autodesk Forge 中的 Design Automation API 转换数据 我的方法是调用一个执行脚本的活动来导入目标数据文件 例如STEP IGES格式 例如 我创建了一个将 STE
  • Mockito 创建模拟对象时抛出 NullPointer

    我有一个集成测试 其中一些设置是使用 Guice 完成的 我正在使用 Mockito 来模拟一些依赖项 到目前为止 这对我来说效果很好 我需要使用 PowerMock 来实现其他一些依赖项 现在 Mockito 正在抛出一个NullPoin
  • React Native ios不显示本地图像

    环境 苹果系统 10 14 6 Xcode 11 0 反应 16 8 6 反应本机 0 60 5 项目文件夹结构 谷歌驱动器图像链接 https drive google com open id 1nvB O5LH2p vq9qyR V7c
  • Java 和 C# 应用程序之间的 SSL 通信

    我的目标是在 Java 服务器和用 C 编写的客户端之间建立安全通信 java服务器代码 System setProperty javax net ssl keyStore cert mySrvKeystore System setProp
  • 递归 http-api 调用后向订阅者发送消息

    我想获取节点列表来创建所述节点对象的数组 以便显示层次结构 基础数据 结构如下所示 ROOT ID 1 NODE ID 2 NODE ID 4 NODE ID 11 NODE ID 3 NODE ID 5 NODE ID 6 NODE ID
  • Django - QuerySet 中的唯一列表

    我有一个过滤后的查询集 其中有一个多对多字段 客户端 我想创建查询集中所有 Client 对象的唯一字典 因此 Projects Queryset Project1 client
  • Xamarin.Forms ListView 通过代码设置 SelectedItem

    我怎样才能设置SelectedItem我的代码中的 ListView 我的问题是 当我在代码中预选择一个项目时 它没有突出显示 ListView 在 xaml 文件中定义
  • 如何手动触发路由解析器

    我在访问之前解析用户帐户片段 of my 用户页面 应用程序路由 component ts path users id component UserComponent resolve user UsersService children p
  • 在 AppleScript 中的“do shell script”对话框中添加进度条

    我正在开发一个用 AppleScript 编写的应用程序 它将 St Bernard 重定向 LaunchDaemon 移动到当前用户的目录 以便用户可以访问家里的任何网站 但让他们在返回学校之前将其放回去 原因是在学校 iPrism 会屏
  • 在 Visual Studio 代码中添加自定义库

    我正在制作一个扩展名为 h 的静态 cpp 库 并且我已在扩展名为 cpp 的不同文件中编写了相同的源代码 现在我想制作一个测试脚本 其中包含我刚刚创建的自定义库 当我使用这个库时 include
  • ng 未被识别为内部或外部命令

    运行 Windows 7 Professional 32 位 I tried running npm install g angular cli both under normal or admin I also tried adding
  • Spring oauth2 hasRole 访问被拒绝

    我对 OAuth2 非常陌生 并尝试在角色 auth server 中构建一台服务器来授权用户 并构建一台保留受保护资源的服务器 我在使用 ResourceServerConfigurerAdapter 时遇到了一些问题 看起来他忽略了从