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

OAuth2 JWT授权-Spring SecurityXML配置问题#OAuth2。哈斯考普

翟京
2023-03-14

我需要将XML配置用于我的Spring Security实现的某些部分。目前我所关心的只是JWT授权,JWT被传递给我。使用Spring Security我确定用户是否被授权访问REST APIendpoint。我不能使用Java配置或@PreAuthorize注释。

仅供参考,当我最初使用@PreAuthorize或类似的方法时:. antMatcher("/学生/**"). access("#oauth2.hasScope('Scope: Admin')");

一切正常。当我被迫迁移到XML配置并使用安全:拦截-url方法时,这个问题出现了。

我遇到的错误是:

"消息":"无法计算表达式'#oauth2.hasScope('Scope: Admin')'"

例外情况是:

Java语言lang.IllegalArgumentException:无法计算表达式#oauth2。hasScope('Scope:Admin')”
位于组织。springframework。安全通道表示表达式实用程序。evaluateAsBoolean(ExpressionUtils.java:30)~[spring-security-core-5.0.3.RELEASE.jar:5.0.3.RELEASE]
。。。为了简洁起见,正在删除异常spew<原因:组织。springframework。表示spel。SpelEvaluationException:EL1011E:方法调用:尝试在空上下文对象上调用方法hasScope(java.lang.String)

XML配置:

<!-- only enable this when deving -->
<!-- <security:debug /> -->  


<bean id="securityConfig"
    class="com.wmay.config.SecurityConfig">
</bean>

<bean id="resourceServerConfig"
    class="com.wmay.config.ResourceServerConfig">
</bean> 


 <bean id="methodSecurityConfig"
    class="com.wmay.config.MethodSecurityConfig">
</bean>

<security:http pattern="/**" use-expressions="true" auto-config="true">
    <security:intercept-url pattern="/students/**"
            access="#oauth2.hasScope('Scope:Admin')"/>
</security:http>

代码段:

@Override 
public void configure(HttpSecurity httpSecurity) throws Exception {     log.info("Configuring HttpSecurity");       
    httpSecurity.csrf().disable();  httpSecurity.cors().configurationSource(corsConfigurationSource());     
    //@// @formatter:off    
    httpSecurity
                .requestMatchers()
                .and().authorizeRequests()
                .antMatchers("/actuator/**").permitAll()
                .antMatchers(HttpMethod.OPTIONS, "/**").permitAll();    
    // @formatter:on 
    }

@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
    log.info(
            "Enabling OAuth2 Method Expression Handler.");
    return new OAuth2MethodSecurityExpressionHandler();
}

共有1个答案

缪朝
2023-03-14

我想出来了。我需要在XML配置文件中添加更多条目。

<bean id="oauth2AuthenticationEntryPoint" 
    class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint" />
<oauth2:resource-server id="resourceServerFilter" 
        resource-id="${security.jwt.resource-ids}" token-services-ref="tokenServices"/>
<oauth2:web-expression-handler id="oauth2WebExpressionHandler" />


<security:http 
        pattern="/**"       
        entry-point-ref="oauth2AuthenticationEntryPoint"        
        authentication-manager-ref="authenticationManager"
        use-expressions="true"
        create-session="stateless">
        <security:intercept-url pattern="/students/**"
            access="#oauth2.hasScope('Scope:Admin')" />     
        <security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
        <security:expression-handler ref="oauth2WebExpressionHandler" />
    </security:http>
 类似资料:
  • 我使用spring-security-oauth2:2.3.3和spring-boot-starter-security:2.0.2构建了带有REST WS的Spring web app。但我无法设置哪些endpoint受到保护。 添加“--header”authorization:Basic{{base64 client id:password}}“也没有帮助。这怎么可能呢? 根据spring

  • 我对spring security&oauth2相当陌生。作为学习的一部分,我试图设置一个OAuth2授权服务器,并保护RESTendpoint免受未经授权的访问。 代码 资源服务器 ProductController.java 未经授权API可以正常工作 如果我们只使用权限(@preauthorize(“hasauthorize('...')”))进行授权,它可以正常工作 作用域在到达oauth

  • 我试图用Github Api做一个授权请求,传递用户名和密码。但它不起作用,我得到了401状态代码。 文件里有一部分说 这是我的密码:

  • 我正在使用以下内容: Spring 4.2 Spring security 4.0.2 Spring oauth2 2.0.7 null 资源服务器配置似乎不限于/rest/**,而是覆盖了所有的安全配置。即对受保护的非OAuth资源的调用不受保护(即筛选器没有捕获它们并重定向到登录)。 配置(为了简单起见,我删除了一些内容):

  • 问题内容: 我正在为iOS 8开发一个Swift代码。我正在尝试做一些涉及位置的事情,因此我在swift视图控制器文件中实现了以下内容: 但是,我似乎无法使此代码正常工作。它不会保存我对位置使用的偏好。它甚至不提示我允许访问位置。我尝试更新我的info.plist。但这不起作用。顺便说一句,如果我始终在模拟器的隐私设置中选择,那么如果我立即切换回该应用程序,它将起作用。有人可以帮忙吗?我确定那是问

  • 在spotify api的授权步骤中,我完全迷失了方向 我需要提出一个类似于邮递员的请求: 具有包含client_id和client_secret(api 凭据)的标头 这些是根据授权流完成的(在他们的授权指南中的第四个-(隐式授权流(客户凭证流))本页最后一个:https://developer.spotify.com/documentation/general/guides/authoriza