Я использую внутренний сервер авторизации OAuth2 и является отдельной (скрытой) сущностью, предоставляющей сервисы токенов (получить токен, проверить токен).
Я пытаюсь защитить свой REST API с помощью этого сервера авторизации, используя безопасность Spring OAuth2, пожалуйста, найдите мой класс конфигурации и реализации XML.
Моя реализация не проверяет токен, он напрямую обращается к RestController и возвращает данные.
весна-security.xml
<security:http pattern="/appl/rest**" use-expressions="true" auto-config="true" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint" access-decision-manager-ref="accessDecisionManager">
<security:anonymous enabled="false" />
<security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
<security:access-denied-handler ref="oauthAccessDeniedHandler" />
<security:expression-handler ref="oauthWebExpressionHandler"/>
</security:http>
<!-- another normal entry http for apaplication -->
<security:http use-expressions="true" auto-config="false" entry-point-ref="preAuthenticatedProcessingFilterEntryPoint" authentication-manager-ref="authenticationManager">
<!-- intercept URL configurations & pre-auth filer config -->
<bean id="oauthAccessDeniedHandler" class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler" />
<bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint" >
<property name="realmName" value="W3IDRealm" />
</bean>
<oauth:expression-handler id="oauthExpressionHandler" />
<oauth:web-expression-handler id="oauthWebExpressionHandler" />
<bean id="tokenServices" class="com.rest.oauth.CWATokenServices" >
<property name="checkTokenEndpointUrl" value="endpointurl"/>
<property name="clientId" value="clientid" />
<property name="clientSecret" value="clicnetsecret"/>
</bean>
<oauth:resource-server id="resourceServerFilter" resource-id="W3IDRealm" token-services-ref="tokenServices" />
<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.web.access.expression.WebExpressionVoter">
<property name="expressionHandler" ref="oauthWebExpressionHandler"/>
</bean>
</list>
</constructor-arg>
</bean>
CWATokenServices, я реализовал на следующем облачном примере реализации собственных ResourceServerTokenServices. Но этот loadAuthenticate не вызывается.
Cloudfactory URL: https://github.com/cloudfoundry/uaa/blob/master/server/src/main/java/org/cloudfoundry/identity/uaa/oauth/RemoteTokenServices.java
@RestController
@RequestMapping("/data")
public class RestDataController {
@RequestMapping(value = "/query/{query}", method = RequestMethod.GET, produces = "application/json")
public ArrayList<PlatformPart> dataJson(@PathVariable String query) {// REST
// Endpoint.
ArrayList<String> resultList = new ArrayList<String>();
// DAO called
return resultList;
}
если я звоню http://localhost:port/appname/rest/data/query/input, я получаю действительный ответ, но это не аутентификация - не проверка токена. У меня есть точка останова на CWATokenServices (метод loadAuthenticate), и я не вхожу в нее.
Дайте мне знать, чего здесь не хватает