0

인증 서버에서 액세스 토큰의 유효성을 검사하는 스프링 oAuth2를 사용하여 순수 자원 서버를 설정하려고합니다.spring oAuth2가 자원을 보호하지 않습니다.

리소스를 보호 할 수 없습니다. 나는 API를 직접 칠 수있다. 예 :

  • GET 로컬 호스트 : 8080/계정 access_token은이 = 63884b81-a3d3-4eab-a92c-7eb1e2022dfd (잘못된 액세스 토큰)
    • GET 로컬 호스트 : 8080/
  • 계정

위의 두 링크 모두 내 리소스에 액세스 할 수 있지만 이러한 링크는 무단 오류를 반환해야합니다.

리소스 서버 구성.

<bean id="authenticationEntryPoint" 
    class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint"> 
    <property name="realmName" value="myRealm" /> 
</bean> 

<bean id="oauthAccessDeniedHandler" 
    class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler" /> 

<bean id="accessDecisionManager" class="org.springframework.security.access.vote.UnanimousBased"> 
    <constructor-arg> 
     <list> 
      <bean class="org.springframework.security.oauth2.provider.vote.ScopeVoter" /> 
      <bean class="org.springframework.security.access.vote.RoleVoter" /> 
      <bean class="org.springframework.security.access.vote.AuthenticatedVoter" /> 
     </list> 
    </constructor-arg> 
</bean> 

<!-- This is not actually used, but it's required by Spring Security --> 
<security:authentication-manager alias="authenticationManager" /> 

<oauth2:expression-handler id="oauthExpressionHandler" /> 

<oauth2:web-expression-handler id="oauthWebExpressionHandler" /> 

<security:global-method-security 
    pre-post-annotations="enabled" proxy-target-class="true"> 
    <security:expression-handler ref="oauthExpressionHandler" /> 
</security:global-method-security> 

<oauth2:resource-server id="myResource" 
    resource-id="myResourceId" token-services-ref="tokenServices" /> 

<security:http pattern="/**" create-session="never" 
    entry-point-ref="authenticationEntryPoint" 
    access-decision-manager-ref="accessDecisionManager"> 
    <security:anonymous enabled="false" /> 
    <security:intercept-url pattern="/**" 
     access="IS_AUTHENTICATED_FULLY" method="GET" /> 
    <security:intercept-url pattern="/**" access="SCOPE_READ" 
     method="HEAD" /> 
    <security:intercept-url pattern="/**" access="SCOPE_READ" 
     method="OPTIONS" /> 
    <security:intercept-url pattern="/**" access="SCOPE_WRITE" 
     method="PUT" /> 
    <security:intercept-url pattern="/**" access="SCOPE_WRITE" 
     method="POST" /> 
    <security:intercept-url pattern="/**" access="SCOPE_WRITE" 
     method="DELETE" /> 
    <security:custom-filter ref="myResource" 
     before="PRE_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    <security:expression-handler ref="oauthWebExpressionHandler" /> 
</security:http> 

답변

0

당신은 인증 서버에서 토큰을 확인하도록 RemoteTokenServices 콩을 구성 할 수 있습니다

<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.RemoteTokenServices" 
      p:checkTokenEndpointUrl="${oaas.endpoint.check_token}" 
      p:clientId="${oaas.client_id}" 
      p:clientSecret="${oaas.client_secret}" /> 

참고 인증 서버 :

@Bean 
     public RemoteTokenServices LocalTokenService() { 
      final RemoteTokenServices tokenService = new RemoteTokenServices(); 
      tokenService.setCheckTokenEndpointUrl("http://yourauthozationserver/oauth/check_token"); 
      tokenService.setClientId("my-client-with-secret"); 
      tokenService.setClientSecret("secret"); 
      return tokenService; 
     } 

또는 XML에서

체크 엔드 포인트는 익명 요청으로부터의 토큰 확인을 허용하도록 구성되어야합니다.