Как работает аутентификация Spring SSO с oauth2? - PullRequest
0 голосов
/ 22 мая 2019

Я настроил 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("..."))
        ;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...