У меня есть монолитное приложение, которое настроено на безопасность пружины. Существует код User user = (User)SecuritycontextHolder.getContext().getAuthentication().getPrincipal()
для аутентификации пользователя, и этот код работает правильно.
После миграции на oauth2 со следующей конфигурацией:
@EnableResourceServer
@EnableWebSecurity
@Configuration
public class ResourcesServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/api/**").access("#oauth2.hasScope('read')");
}
@Primary
@Bean
public RemoteTokenServices tokenService() {
RemoteTokenServices tokenService = new RemoteTokenServices();
tokenService.setCheckTokenEndpointUrl("http://localhost:8081/auth/account/getDetailUser");
tokenService.setClientId("web");
tokenService.setClientSecret("secret");
return tokenService;
}
И его application.yml:
spring:
datasource:
url: jdbc:oracle:thin:@192.168.192.129:1521:hamed
hikari:
connection-test-query: SELECT 1 FROM DUAL
minimum-idle: 1
maximum-pool-size: 5
driver-class-name: oracle.jdbc.OracleDriver
username: test
password: test
initialization-mode: always
jpa:
hibernate:
ddl-auto: none
database-platform: org.hibernate.dialect.Oracle12cDialect
logging:
level:
org.springframework.security: DEBUG
server:
port: 8083
context-path: /micro1
security:
basic:
enabled: false
oauth2:
client:
clientId: web
clientSecret: secret
accessTokenUri: http://localhost:8081/auth/oauth/token
userAuthorizationUri: http://localhost:8081/auth/oauth/authorize
resource:
userInfoUri: http://localhost:8081/auth/account/getDetailUser
(User)SecuritycontextHolder.getContext().getAuthentication().getPrincipal()
не работает на сервере ресурсов. С другой стороны, как получить от сервера авторизации полномочия и другую информацию от пользователя, прошедшего авторизацию, в Resource Server.