Spring Security OAuth2 Jwt 访问被拒绝

Posted

技术标签:

【中文标题】Spring Security OAuth2 Jwt 访问被拒绝【英文标题】:Spring Security OAuth2 Jwt Access Denied 【发布时间】:2020-12-19 02:21:24 【问题描述】:

我正在尝试编写有关 Spring Security 和 OAuth2、Spring boot 1.5 的教程 https://www.tutorialspoint.com/spring_boot/spring_boot_oauth2_with_jwt.htm。我可以获得访问令牌。但是当我尝试获取端点时,我在 Postman 中收到拒绝访问错误。我正在使用 Mac 操作系统。

配置方法

@Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests().anyRequest().authenticated().and().sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.NEVER);
    

在 tokenEnhancer 方法中我注释了公钥,因为我有一个关于 Mac 验证的错误

@Bean
    public JwtAccessTokenConverter tokenEnhancer() 
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey(privateKey);
        //converter.setVerifierKey(publicKey);
        return converter;
    

【问题讨论】:

403 错误表示用户已通过身份验证但无权访问。用户未授权。你能展示你的 configure(HttpSecurity http) 方法吗? 【参考方案1】:

具有适当 GrantedAuthority 的用户应该可以访问端点,并且可以通过下一个设置来实现。

例如

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests()
        .antMatchers("/products/**").hasRole("USER")
        .anyRequest().authenticated()
        .and().sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.NEVER);

另一方面,需要了解用户的“角色”。

可以签入数据库或其他保存此信息的地方。

或者需要找到定义当前用户原理的方法。这取决于身份验证的类型。实现方法doFilterInternalOncePerRequestFilter抽象类负责定义Priciple。

【讨论】:

以上是关于Spring Security OAuth2 Jwt 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security Oauth2

Spring-Security OAuth2 设置 - 无法找到 oauth2 命名空间处理程序

Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt

针对授权标头的Spring Security OAuth2 CORS问题

OAuth2.0学习(4-1)Spring Security OAuth2.0 - 代码分析

Spring Security---Oauth2详解