Можем ли мы переопределить 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
}
}