java Spring安全性在同一API中使用OKTA保护某些rest端点,使用Active Directory保护其他端点
我有RESTAPI,我需要用OKTA身份验证保护一些(面向UI)端点,用Azure Active Directory保护其他(面向后端)端点。我设法分开做(我可以用OKTA或AAD保护端点),但他们不想一起工作。一旦我将okta-spring引导启动器添加到POM(或okta-spring-security-oauth2)中,AAD安全性就会停止工作,并且端点要么是打开的,要么是仅使用okta进行保护的。我正在尝试使用okta和aad的WebSecurity配置适配器实现:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Configuration
@Order(1)
public static class OktaAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/v1/endpoint1").authenticated()
.antMatchers("/v1/endpoint2/**").authenticated();
}
}
@Configuration
@Order(2)
public static class ActiveDirectoryAdapter extends WebSecurityConfigurerAdapter {
@Autowired
private AADAppRoleStatelessAuthenticationFilter filter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/v1/endpoint3/**").authenticated()
.antMatchers("/v1/endpoint4/**").authenticated()
.and()
.addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);
}
}
}
但是,此配置仅适用于endpoint1和endpoint2(由okta保护),其他rest点是开放的(好像忽略了WebSecurityConfigureAdapter的第二个实现)。如果我从pom中删除okta包,AAD配置将开始工作。如果我切换上述配置的顺序,则没有任何安全性。我怀疑okta软件包进行了一些自动配置,但找不到任何关于它的信息。我错过了什么
# 1 楼答案
Okta Spring引导启动器主要是一个轻量级的包装器,用于帮助配置现有的Spring安全OAuth自动配置,只需几个Okta特定的位
我的第一个建议(如果可能的话)是尝试为两个IDP使用SpringSecurityOAuth,因为它看起来不像AADStarterWorksSpringSecurity的内置OAuth支持(我可能错了,我只是快速看了一下)。假设AAD只是OAuth/OIDC,它只需进行一点配置即可工作
您仍然需要一个解决方案来保护您的给定路线1&;2->;Okta 3&;4 AAD。有几种方法可以做到这一点。您可以使用作用域(假设它们不同)或其他类型的“权限”:
Okta Spring启动程序应该与其他配置了Spring Security OAuth属性的IDP一起工作:https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2login-boot-property-mappings
我不能百分之百地赞同AddStarter添加的内容,但我猜它与Okta类似。即:
就JWT验证而言,Okta建议对JWT进行如下验证: https://scotch.io/tutorials/jwt-vs-opaque-access-tokens-use-both-with-spring-boot#toc-better-jwt-validation
如果需要,也可以使用类似的技术
随时通知我们