Spring Boot 1.3.3 @EnableResourceServer 및 @EnableOAuth2So 동시에
내 서버를 베어러 액세스 토큰을 허용할 수 있는 리소스 서버로 설정합니다.
그러나 이러한 토큰이 존재하지 않는 경우 OAuth2Server를 사용하여 사용자를 인증하고 싶습니다.
저는 다음과 같이 하려고 합니다.
@Configuration
@EnableOAuth2Sso
@EnableResourceServer
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
}
그러나, 이 경우에는, 오직@EnableResourceServer
주석 작업돌아옵니다
Full authentication is required to access this resource
로그인 페이지로 리디렉션 안 함
내가 언급한 것은@Order
중요합니다, 만약 제가 추가한다면.@Order(0)
주석, 로그인 페이지로 리디렉션되지만 Http 헤더에 있는 access_token으로 리소스에 액세스할 수 없습니다.
Authorization : Bearer 142042b2-342f-4f19-8f53-bea0bae061fc
어떻게 하면 제 목표를 달성할 수 있을까요?나는 그것이 Access 토큰과 SSO를 동시에 사용하기를 원합니다.
감사합니다.
동일한 요청에 두 구성을 모두 사용하는 것은 모호합니다.이에 대한 해결책이 있을 수 있지만 별도의 요청 그룹을 정의하는 것이 더 명확합니다.
- OAuth2So: 브라우저에서 오는 사용자의 경우 토큰에 대한 인증 공급자로 리디렉션합니다.
- ResourceServer: 일반적으로 api 요청의 경우, 어딘가에서 가져온 토큰과 함께 제공됩니다(대부분 동일한 인증 공급자로부터).
이 작업을 수행하려면 request matcher를 사용하여 구성을 분리합니다.
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Bean("resourceServerRequestMatcher")
public RequestMatcher resources() {
return new AntPathRequestMatcher("/resources/**");
}
@Override
public void configure(final HttpSecurity http) throws Exception {
http
.requestMatcher(resources()).authorizeRequests()
.anyRequest().authenticated();
}
}
sso 필터 체인에서 제외합니다.
@Configuration
@EnableOAuth2Sso
public class SsoSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("resourceServerRequestMatcher")
private RequestMatcher resources;
@Override
protected void configure(final HttpSecurity http) throws Exception {
RequestMatcher nonResoures = new NegatedRequestMatcher(resources);
http
.requestMatcher(nonResoures).authorizeRequests()
.anyRequest().authenticated();
}
}
그리고 당신의 모든 자원을 아래에 두시오./resources/**
물론 이 경우 둘 다 동일한 oauth2 구성을 사용합니다.accessTokenUri
,jwt.key-value
등)
업데이트 1:
실제로 위의 구성에 대해 이 요청 메처를 사용하여 원래 목표를 달성할 수 있습니다.
new RequestHeaderRequestMatcher("Authorization")
업데이트 2: (@sid-morad의 코멘트 설명)
Spring Security는 각 구성에 대한 필터 체인을 생성합니다.각 필터 체인의 요청 일치 장치는 구성 순서에 따라 평가됩니다.WebSecurityConfigurerAdapter
기본 순서 100이 있습니다.ResourceServerConfiguration
기본적으로 3개가 주문됩니다.그 말은ResourceServerConfiguration
의 요청 일치자를 먼저 평가했습니다.다음과 같은 구성에 대해 이 순서를 재정의할 수 있습니다.
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Autowired
private org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration configuration;
@PostConstruct
public void setSecurityConfigurerOrder() {
configuration.setOrder(3);
}
...
}
@Configuration
@EnableOAuth2Sso
@Order(100)
public class SsoSecurityConfiguration extends WebSecurityConfigurerAdapter {
...
}
따라서 예, 다음에 대해 요청 일치자가 필요하지 않습니다.SsoSecurityConfiguration
위의 견본에서하지만 배후에 있는 이유를 알게 되어 좋습니다 :)
언급URL : https://stackoverflow.com/questions/37059128/spring-boot-1-3-3-enableresourceserver-and-enableoauth2sso-at-the-same-time
'programing' 카테고리의 다른 글
사용자에게 Oracle의 추가 스키마에 대한 액세스 권한을 부여하는 올바른 방법 (0) | 2023.07.22 |
---|---|
오라클의 기존 인덱스에 열 추가 (0) | 2023.07.22 |
Spring-Boot: 여러 요청 동시 처리 (0) | 2023.07.22 |
Oracle의 STANDARD_HASH와 일치하도록 Python의 정수 해시 (0) | 2023.07.22 |
Spring boot 응용 프로그램의 사용자 지정 오류 페이지로 리디렉션하는 중 오류 발생 (0) | 2023.07.22 |