[SPRING] Scope을 기반으로 @PreAuthorize를 사용하여 스프링 보안 oauth 리소스를 보호하려면 어떻게해야합니까?
SPRINGScope을 기반으로 @PreAuthorize를 사용하여 스프링 보안 oauth 리소스를 보호하려면 어떻게해야합니까?
외부 앱이 내 애플리케이션으로 인증 할 수 있도록 spring-security-oauth2를 성공적으로 구성했습니다. 그러나 외부 응용 프로그램을 기반으로하고 사용자가 허용 한 것을 기반으로 클라이언트의 하위 집합 만 클라이언트에 액세스 할 수 있어야합니다. 사용 가능한 하위 집합은 OAuth 범위로 결정됩니다.
고전적인 Spring 애플리케이션에서 @PreAuthorize를 사용하여 역할을 기반으로 경계를 강화할 수 있습니다.
@Controller
public class MyController {
@PreAuthorize("hasRole('admin')")
@RequestMapping("...")
public String doStuff() {
// ...
}
}
OAuth를 사용할 때와 역할 대신 범위를 사용할 때 어떻게 동일한 작업을 수행합니까?
해결법
-
==============================
1.Spring OAuth에는 OAuth2MethodSecurityExpressionHandler가 포함되어 있습니다. OAuth2MethodSecurityExpressionHandler는 @PreAuthorize 표현식을 사용하여 이러한 검사를 수행 할 수있는 기능을 추가하는 클래스입니다. 이 수업을 등록하기 만하면됩니다. Javaconfig를 사용하는 경우 다음과 같이하십시오.
Spring OAuth에는 OAuth2MethodSecurityExpressionHandler가 포함되어 있습니다. OAuth2MethodSecurityExpressionHandler는 @PreAuthorize 표현식을 사용하여 이러한 검사를 수행 할 수있는 기능을 추가하는 클래스입니다. 이 수업을 등록하기 만하면됩니다. Javaconfig를 사용하는 경우 다음과 같이하십시오.
@Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public static class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { @Override protected MethodSecurityExpressionHandler createExpressionHandler() { return new OAuth2MethodSecurityExpressionHandler(); } }
이제 다음과 같이 간단하게 사용할 수 있습니다.
@PreAuthorize("#oauth2.hasScope('requiredScope')")
귀하의 요청 방법을 보호하십시오. 사용 가능한 추가 메소드를 보려면 옆에있는 hasScope 클래스를 확인하십시오. OAuth2SecurityExpressionMethods.
단점은 OAuth2MethodSecurityExpressionHandler가 DefaultMethodSecurityExpressionHandler를 확장하므로이 클래스를 확장하는 다른 클래스와 결합 할 수 없다는 것입니다.
또는 OAuth 범위를 기존 사용자 역할에 매핑 할 수도 있습니다.
from https://stackoverflow.com/questions/33638850/how-to-protect-spring-security-oauth-resources-using-preauthorize-based-on-scop by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Proguard는 수업을 찾을 수 없다고 말하고 있습니다. (0) | 2019.03.29 |
---|---|
[SPRING] applicationContext.xml에서 환경 변수 읽기 (0) | 2019.03.29 |
[SPRING] @IfProfileValue를 사용하여 프로필이 활성 상태인지 테스트하려면 어떻게해야합니까? (0) | 2019.03.29 |
[SPRING] @ManagedResource objectName을 동적으로 변경하십시오 (0) | 2019.03.29 |
[SPRING] 스프링 보안에서 계층 적 역할 구현하기 (0) | 2019.03.29 |