无法从Spring Okta(CRA SPA)检索主体

时间:2018-10-25 05:46:11

标签: spring spring-boot okta

我目前正在尝试使用SPA前端(Create-React-App)和Spring Boot应用程序来测试Okta。

当前,我可以运行这些应用程序,因为用户可以通过okta在前端登录。然后,用户可以从服务器访问受保护的资源(春季启动)。因此,集成可以很好地进行。

我的问题是我无法在我的Rest Controller上访问主体。

ENV

注意:Spring-Security-Starter不在类路径上,而仅是OAuth2自动配置

  • Spring Boot 2.0.6.RELEASE
  • okta-spring-boot-starter:0.6.1
  • spring-security-oauth2-autoconfigure:2.0.6.RELEASE'

春季配置

okta.oauth2.issuer=https://dev-886281.oktapreview.com/oauth2/default
okta.oauth2.clientId={ clientId }
okta.oauth2.audience=api://default
okta.oauth2.scopeClaim=scp
okta.oauth2.rolesClaim=groups

security.oauth2.resource.user-info-uri=https://dev-886281.oktapreview.com/oauth2/default/v1/userinfo

Okta服务配置

   Application type: Single Page App (SPA)
   Allowed grant types: Implicit
   Allow Access Token with implicit grant type: true

控制器

@RestController
@RequestMapping("/products")
public class ProductController {
...
@GetMapping
public ResponseEntity<List<ProductEntity>> getAllProducts(Principal principal) {

SpringBoot

@EnableResourceServer
@SpringBootApplication
public class CartyApplication {

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

@EnableGlobalMethodSecurity(prePostEnabled = true)
protected static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration {
    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        return new OAuth2MethodSecurityExpressionHandler();
    }
}

@Bean
protected ResourceServerConfigurerAdapter resourceServerConfigurerAdapter() {
    return new ResourceServerConfigurerAdapter() {
        @Override
        public void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .antMatchers(HttpMethod.OPTIONS,"/**").permitAll()
                    .anyRequest().authenticated();
        }
    };
}

一旦整体集成工作正常,用户只能通过okta登录后才能访问受保护的资源,我只是想知道如何从控制器上的okta获取用户详细信息。

谢谢。

P.S soz用于代码转储

编辑:删除了代码片段并添加了完整的CartyApplication类

EDIT2:添加了回购-https://github.com/Verric/carty-temp

2 个答案:

答案 0 :(得分:0)

我觉得您可能会错过这个:

@EnableGlobalMethodSecurity(prePostEnabled = true)
    protected static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration {
        @Override
        protected MethodSecurityExpressionHandler createExpressionHandler() {
            return new OAuth2MethodSecurityExpressionHandler();
        }
    }

答案 1 :(得分:0)

我猜应该删除.antMatchers("/**").permitAll()行。 参见:https://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#CO3-2

我猜您想保护所有/大多数端点?我建议只允许特定的路线,并保护其他所有路线。