У меня есть приложение Spring Boot (1.3.x), действующее как сервер ресурсов, и я могу передать токен JWT из Keycloak в заголовке авторизации, и мне разрешен доступ к некоторым конечным точкам. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить информацию, которая находится в моем токене JWT в объекте авторизации.
SecurityContext sc = SecurityContextHolder.getContext();
Authentication a = sc.getAuthentication(); //OR OAuth2Authentication oa = (OAuth2Authentication)a;
Object p = a.getPrincipal();
и p будет содержать имя client_id, если IDP поместит его в токен.
isClientOnly() возвращает истину. Почему?
Я хотел бы иметь возможность получить имя моего пользователя и гранты, но ничего из этого не найдено. Если у меня нет client_id, он фактически равен нулю.
Я пытался понять, нужно ли мне как-то настраивать то, как обрабатываются токены JWT после проверки, чтобы правильная информация попадала в объект аутентификации, но я полностью запутался. Как я могу это сделать?
Spring Boot великолепен тем, что вы можете сделать так мало, чтобы что-то запустить, но в то же время я не понимаю, с чего начать или что на самом деле вообще установлено...
мое приложение.yml:
server:
servlet-path: /*
security:
oauth2:
resource:
jwt:
keyValue:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmFbcU2Q6WZwUjEBvsZP8kIiE5mmctTGq1SOrPN5U4MkaTVs/zs2cWf+fhIE4WQ+dF9xTPxrJCGkwCMMXEhReFadOvzW8S3VdKdhng/j2GUbleU1QLSOGLhXu2+ODxeToZGpXIxtJiK2wE0JI9T6UwAe9j/stp4pMUzQubkG9acA+lpA5+zaCylLHysNFlSO1cTgzTdIZpXQGu5nkmyz7xT6vq8n2qAsD5GG5JRpBAac6L10Hnvl1YbwnPfi1T+IZSq7FdSpGJmYeOiPhJF0j7qYOMcaQgOfzoQGBhXslIHZeeaBIuUM6QFgZacJsVxdQoRvMronuuacnS+bngMEVDQIDAQAB
-----END PUBLIC KEY-----
logging:
level:
org:
springframework:
security: DEBUG
мой SecurityConfig.java:
package com.something.me;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
@Configuration
@EnableOAuth2Sso
@EnableResourceServer
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
//TODO add scope and role restrictions...
http.authorizeRequests().anyRequest().authenticated();
}