首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法从Spring Okta检索主体(CRA SPA)

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

Stack Overflow用户
提问于 2018-10-25 13:46:11
回答 2查看 165关注 0票数 0

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

目前,我有应用程序的工作,因为用户登录在前端(通过okta)。然后,用户可以从服务器访问受保护的资源(spring boot)。因此,集成工作得很好。

我的问题是我不能访问Rest控制器上的主体。

增强版

注意: Spring-Security-Starter不在类路径上,只在OAuth2 autoconf上

  • 春季启动2.0.6.RELEASE
  • okta-spring-boot-starter:0.6.1
  • spring-security-oauth2-autoconfigure:2.0.6.RELEASE'

Spring配置

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:新增repo - https://github.com/Verric/carty-temp

EN

回答 2

Stack Overflow用户

发布于 2018-10-25 20:03:50

我有预感你可能会错过这个:

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

Stack Overflow用户

发布于 2018-10-25 21:20:10

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52982123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档