我目前正在尝试使用SPA前端(Create-React-App)和Spring Boot应用程序来测试Okta。
当前,我可以运行这些应用程序,因为用户可以通过okta在前端登录。然后,用户可以从服务器访问受保护的资源(春季启动)。因此,集成可以很好地进行。
我的问题是我无法在我的Rest Controller上访问主体。
ENV
注意:Spring-Security-Starter不在类路径上,而仅是OAuth2自动配置
春季配置
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
答案 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
我猜您想保护所有/大多数端点?我建议只允许特定的路线,并保护其他所有路线。