Я настроил 2 клиента oauth2 веб-приложений Spring Boot 2, работающих на разных портах, и сервер авторизации. Если я аутентифицируюсь в одном веб-приложении, я могу перейти к защищенному ресурсу в другом. Блестящий, SSO в действии!
Но, глядя на сетевой трафик, я не вижу никаких токенов Bearer в заголовках, только некоторые файлы cookie, связанные с SESSIONID. Использование HTTP-сессий заставило меня беспокоиться о том, что может возникнуть проблема с горизонтальным масштабированием. Потом я понял, что второе приложение как-то работает и аутентифицируется.
Так, что браузер передает вызов второму веб-приложению, которое позволяет ему использовать существующую аутентификацию? Существуют ли проблемы с масштабированием из-за использования http-сессии весенней безопасностью.
спасибо
ui oauth2 client application.yml (с использованием реализации oauth2 безопасности весенней загрузки 2)
spring:
profiles: oauth2-security
security:
oauth2:
client:
registration:
myoauth:
client-id: myoauth-trusted-client
client-secret: ...
authorization-grant-type: authorization_code
redirect-uri-template: http://localhost:${server.port}/ui/login/oauth2/code/myoauth
provider:
myoauth:
authorization-uri: http://localhost:8081/auth/oauth/authorize
token-uri: http://localhost:8081/auth/oauth/token
user-info-uri: http://localhost:8081/auth/user_info
user-info-authentication-method: header
user-name-attribute: name
Сервер авторизации. использование shim jar spring-security-oauth2-autoconfigure
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
private AuthenticationManager authenticationManager;
public AuthorizationServerConfig(AuthenticationConfiguration authenticationConfiguration) throws Exception {
this.authenticationManager = authenticationConfiguration.getAuthenticationManager();
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
security.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints
.authenticationManager(this.authenticationManager) //for use with password grant type
.authorizationCodeServices(new InMemoryAuthorizationCodeServices()); //for use with authorization_code grant type
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("myoauth-trusted-client")
.authorizedGrantTypes("authorization_code")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.secret("{bcrypt}" + new BCryptPasswordEncoder().encode("..."))
.scopes("all")
.autoApprove(true)
.redirectUris("http://localhost:8082/ui/login/oauth2/code/myoauth", "http://localhost:8083/ui/login/oauth2/code/myoauth").and()
.withClient("myoauth-client-with-secret")
.authorizedGrantTypes("password", "client_credentials")
.authorities("ROLE_CLIENT")
.scopes("read")
.secret("{bcrypt}" + new BCryptPasswordEncoder().encode("..."))
;
}
}