Можем ли мы переопределить CheckTokenEndpoint и предоставить пользовательский CheckTokenEndpoint в Spring Oauth2?

Мое приложение имеет отдельный сервер авторизации и сервер ресурсов. Сервер авторизации предоставляет токен доступа к серверу ресурсов. Затем сервер ресурсов отправляет запрос на защищенный ресурс с токеном доступа.

Ресурсный сервер использует RemoteTokenServices проверить правильность маркера доступа или нет.

@Bean
public RemoteTokenServices remoteTokenServices(final @Value("${auth.server.url}") String checkTokenUrl,
    final @Value("${auth.server.clientId}") String clientId,
    final @Value("${auth.server.clientsecret}") String clientSecret) 
{
  final RemoteTokenServices remoteTokenServices = new RemoteTokenServices();
  remoteTokenServices.setCheckTokenEndpointUrl(checkTokenUrl+"?name=value");
  remoteTokenServices.setClientId(clientId);
  remoteTokenServices.setClientSecret(clientSecret);
  remoteTokenServices.setAccessTokenConverter(accessTokenConverter());
  return remoteTokenServices;
}

application.yml

auth:
    server:
      url: http://localhost:9191/api/oauth/check_token/
      clientId: clientid
      clientsecret: secret

Я хочу передать дополнительный параметр, такой как идентификатор ресурса, чтобы я мог проверить, авторизован ли токен для этого ресурса или нет.

Я хочу получить этот параметр в org.springframework.security.oauth2.provider.endpoint.CheckTokenEndpointи хотите переопределить метод ниже, чтобы добавить немного логики. Является ли это возможным?

@RequestMapping(value = "/oauth/check_token")
@ResponseBody
public Map<String, ?> checkToken(@RequestParam("token") String value) {
  OAuth2AccessToken token = resourceServerTokenServices.readAccessToken(value);
  if (token == null) {
    throw new InvalidTokenException("Token was not recognised");
  }

  if (token.isExpired()) {
    throw new InvalidTokenException("Token has expired");
  }

  OAuth2Authentication authentication = resourceServerTokenServices.loadAuthentication(token.getValue());

  Map<String, ?> response = accessTokenConverter.convertAccessToken(token, authentication);

  return response;
}

Как отправить какой-либо параметр в oauth / check_token и переопределить checkToken() метод?

В основном, что я делаю, когда генерируется токен доступа, я сохраняю некоторые записи о ресурсах, для которых токен разрешен.

Когда я получаю запрос на ресурс на сервере ресурсов, я хочу передать идентификатор ресурса серверу авторизации и проверить, авторизован ли токен для этого ресурса или нет?

1 ответ

Я просто создал новый CustomCheckTokenEndpoint и скопировал весь код CheckTokenEndpoint, а затем переопределил метод checkToken(...)

@Configuration
@EnableAuthorizationServer
public class CustomAuthorizationServer extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.pathMapping("/oauth/check_token", "/my/oauth/check_token");
   }
}
**CustomCheckTokenEndpoint.java**
public class CustomCheckTokenEndpoint {
     // copy whole CheckTokenEndpoint
    @RequestMapping(value = "/my/oauth/check_token")
    @ResponseBody
    public Map<String, ?> checkToken(String value) {
        // your code will be here
    }
}
Другие вопросы по тегам