복붙노트

[SPRING] RESTful 끝점에 대한 스프링 폼 기반 로그인을 비활성화하려면 어떻게합니까?

SPRING

RESTful 끝점에 대한 스프링 폼 기반 로그인을 비활성화하려면 어떻게합니까?

auto-config = 'true'에 따라 기본 및 폼 기반 인증을 사용하여 스프링 보안을 구성했습니다.

/ api / **에있는 엔드 포인트가 양식 기반 보안을 사용하지 않기를 바란다. / api / ** 외부의 다른 엔드 포인트는 양식 기반 로그인을 사용해야합니다. / api / ** 아래에 자격 증명을 제공하지 않은이 끝점에 대한 모든 호출에 401 응답을 보내고 싶습니다.

업데이트 : 아래의 Luke Taylor의 의견에 감사 드리며 다음 솔루션을 제안했습니다.

참고 :이 기술은 스프링 보안 3.1에서만 적용 할 수 있습니다.

처음에는 / api / **를 사용했습니다. 사용 가능한 경우 세션을 사용하지만 결코 세션을 생성하지 않습니다.이 작업은 create-session = "never"및 사용으로 처리됩니다.

<http pattern="/api/**" create-session="never" use-expressions="true">
    <http-basic />
    <session-management />
    <intercept-url pattern="/api/**" access="hasRole('API_ACCESS')"/>
</http>

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/" access="permitAll"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>
</http>

해결법

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

    1.Spring Security 3.1을 사용하면 가장 좋은 방법은 두 개의 분리 된 요소를 사용하여 응용 프로그램의 안정적이지 않은 부분과 별도의 필터 체인을 분리하는 것입니다. 기본 체인은 정상적인 양식 로그인 구성을 사용할 수있는 반면, 안심할 수있는 API 체인은 상태가없고 기본 인증을 사용하도록 구성 할 수 있습니다.

    Spring Security 3.1을 사용하면 가장 좋은 방법은 두 개의 분리 된 요소를 사용하여 응용 프로그램의 안정적이지 않은 부분과 별도의 필터 체인을 분리하는 것입니다. 기본 체인은 정상적인 양식 로그인 구성을 사용할 수있는 반면, 안심할 수있는 API 체인은 상태가없고 기본 인증을 사용하도록 구성 할 수 있습니다.

    그러면 다음과 같이됩니다.

    <http pattern="/api/**" create-session="stateless">
        <intercept-url pattern="/api/**" access="ROLE_API_USER" />
        <http-basic />        
    </http>
    
    <!-- No pattern attribute, so defaults to matching any request -->
    <http>
        <intercept-url pattern="/**" access="ROLE_USER" />
        <form-login />        
    </http>
    

    체인 정의는 가장 구체적인 패턴에서 가장 일반적인 순서로 정렬되어야하므로 기본 체인이 마지막에옵니다.

  2. from https://stackoverflow.com/questions/11946903/how-can-i-disable-spring-form-based-login-for-restful-endpoints by cc-by-sa and MIT license