Используйте JWT, когда сервер авторизации создает токен, по умолчанию AccessTokenConverter
реализация DefaultAccessTokenConverter
метод convertAccessToken
делает: "response.put(this.clientIdAttribute, clientToken.getClientId());"
, чтобы токен также включал идентификатор клиента. Вышеупомянутый response
- это просто хэш-карта, которая будет конвертирована в JWT.
Когда ваш сервер ресурсов попадет на GET /access/resource
:
@RequestMapping("/access/resource")
public @ResponseBody Map<String,Object> getRes() throws IOException {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
ObjectMapper objMapper = new ObjectMapper();
Map<String,Object> map = objMapper.convertValue(auth.getDetails(),Map.class);
Jwt jwt = JwtHelper.decode((String) map.get("tokenValue"));
Map<String,Object> claims = objMapper.readValue(jwt.getClaims(),Map.class);
// This is what you want
String clnt_id = (String) claims.get("client_id"); <<------- here
// your logic here based on clnt_id
// ex: if(clnt_id.equals("Specific client"){}
...
return Collections.emptyMap();;
}
ИЛИ
OAuth2Request
также включает в себя разрешенный идентификатор клиента:
Authentication auth =
SecurityContextHolder.getContext().getAuthentication();
String cliend_id = ((OAuth2Authentication) auth).getOAuth2Request().getClientId()
Эта опция может быть применена, даже если JWT не используется, поскольку Oauth2request всегда там.
Посмотрите здесь чтобы лучше понять: