복붙노트

[SPRING] Scope을 기반으로 @PreAuthorize를 사용하여 스프링 보안 oauth 리소스를 보호하려면 어떻게해야합니까?

SPRING

Scope을 기반으로 @PreAuthorize를 사용하여 스프링 보안 oauth 리소스를 보호하려면 어떻게해야합니까?

외부 앱이 내 애플리케이션으로 인증 할 수 있도록 spring-security-oauth2를 성공적으로 구성했습니다. 그러나 외부 응용 프로그램을 기반으로하고 사용자가 허용 한 것을 기반으로 클라이언트의 하위 집합 만 클라이언트에 액세스 할 수 있어야합니다. 사용 가능한 하위 집합은 OAuth 범위로 결정됩니다.

고전적인 Spring 애플리케이션에서 @PreAuthorize를 사용하여 역할을 기반으로 경계를 강화할 수 있습니다.

@Controller
public class MyController {
  @PreAuthorize("hasRole('admin')")
  @RequestMapping("...")
  public String doStuff() {
    // ...
  }
}

OAuth를 사용할 때와 역할 대신 범위를 사용할 때 어떻게 동일한 작업을 수행합니까?

해결법

  1. ==============================

    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 범위를 기존 사용자 역할에 매핑 할 수도 있습니다.

  2. 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