我目前正在尝试使用SPA前端(Create-React-App)和Spring Boot应用程序来测试Okta。
目前,我有应用程序的工作,因为用户登录在前端(通过okta)。然后,用户可以从服务器访问受保护的资源(spring boot)。因此,集成工作得很好。
我的问题是我不能访问Rest控制器上的主体。
增强版
注意: Spring-Security-Starter不在类路径上,只在OAuth2 autoconf上
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
发布于 2018-10-25 20:03:50
我有预感你可能会错过这个:
@EnableGlobalMethodSecurity(prePostEnabled = true)
protected static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
return new OAuth2MethodSecurityExpressionHandler();
}
}
发布于 2018-10-25 21:20:10
我猜应该删除.antMatchers("/**").permitAll()
行。请参阅:https://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#CO3-2
我猜您想要保护所有/大多数端点?我建议只允许特定的路由,并保护其他所有内容。
https://stackoverflow.com/questions/52982123
复制相似问题