как сохранить логин пользователя при закрытии браузера в облачной архитектуре - PullRequest
0 голосов
/ 24 октября 2018

В настоящее время я работаю с архитектурой весенних облачных микросервисов, у меня есть сервер авторизации oauth2, серверы zuul, eureka discovery и resources.Zuul Proxy также имеет UI клиента угловой.я делаю sso на сервере zuul, и он работает нормально, я могу получить токены доступа и ретрансляцию на нисходящие сервисы.Мой вопрос заключается в том, когда я захожу с помощью sso после закрытия браузера, логин не сохраняется.я также попытался использовать запомнить меня на сервере oauth2, который делает вход в систему сохраняется на сервере oauth2, но не в клиенте (zuul и angular ui).как мне сохранить логин в клиенте?

Сервер авторизации.

@Configuration
@EnableAuthorizationServer
public class OAuth2Configuration extends 
AuthorizationServerConfigurerAdapter{

@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;

@Autowired
private UserDetailsService userDetailsService;

@Autowired
private DataSource dataSource;

@Bean
public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.jdbc(dataSource); 
}

@Bean
@Primary
public DefaultTokenServices tokenServices() {
    final DefaultTokenServices defaultTokenServices = new 
    DefaultTokenServices();
    defaultTokenServices.setTokenStore(tokenStore());
    defaultTokenServices.setSupportRefreshToken(true);
    return defaultTokenServices;
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer 
endpoints) throws Exception {

    final TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
    tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), accessTokenConverter()));        endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain).authenticationManager(authenticationManager);
        endpoints.userDetailsService(userDetailsService);
}

@Bean
public TokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());
}

@Bean
public TokenEnhancer tokenEnhancer() {
    return new CustomTokenEnhancer();
}


@Bean
protected JwtAccessTokenConverter accessTokenConverter() {
    KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("securekeys.jks"), "secure123".toCharArray());
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    converter.setKeyPair(keyStoreKeyFactory.getKeyPair("securekeys"));
    return converter;
}

}

zuul (API-шлюз с угловой)

@EnableZuulProxy
@EnableOAuth2Sso
@Configuration
public class OauthConfig extends WebSecurityConfigurerAdapter{

 @Override
 protected void configure(HttpSecurity http) throws Exception {

   http
   .httpBasic().disable()
   .logout().and()
   .authorizeRequests()
   .antMatchers("/index.html","/*.js","/*.js.map", "/home", "/login" 
    ,"/").permitAll()
       .anyRequest().authenticated()
       .and()
   .csrf()

  .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

 }

 @Bean
 public OAuth2RestOperations 
 restOperations(OAuth2ProtectedResourceDetails 
 resource,OAuth2ClientContext context) {
   return new OAuth2RestTemplate(resource, context);
}  

}

@Configuration
public class JwtConfiguration {

@Autowired
JwtAccessTokenConverter jwtAccessTokenConverter;


@Bean
@Qualifier("tokenStore")
public TokenStore tokenStore() {
    return new JwtTokenStore(jwtAccessTokenConverter);
}

@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
    JwtAccessTokenConverter converter =  new JwtAccessTokenConverter();
    Resource resource = new ClassPathResource("public.cert");
    String publicKey = null;
    try {
        publicKey = new String(FileCopyUtils.copyToByteArray(resource.getInputStream()));
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    converter.setVerifierKey(publicKey);
    return converter;
   }
}

 public class ViewController {

  @GetMapping(value = "/{path:[^\\.]*}")
    public String redirect() {
        return "forward:/index.html";
    }

}

zuul (application.yml)

spring:
application:
name: zuul-proxy

server:
  port: 8080

eureka:
  client:
   register-with-eureka: true
   fetch-registry: true
   service-url:
   defaultZone: http://localhost:8761/eureka      

security:
 oauth2:
  client:
    client-id: clientid
    client-secret: secret
    access-token-uri: http://localhost:8081/authserver/oauth/token
    user-authorization-uri: 
         http://localhost:8081/authserver/oauth/authorize

 resource:
   jwt:
     key-value:    
         -----BEGIN PUBLIC KEY-----          MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIUDSFZSDAQEAqqgETvajhbRgnr/Gypwo/eJ95Df5l+0rOQzzHtt5KHCJRm86WmncAGMfGHcqYxFH3YBB14ZTU/bzMHun/qFxqxM720OFVAJQMdoO6UFXXOp9vHiQib/qCNeU8Y1QWTeqkUJ6AorPsHqH0VVbp1RdW0YBT4PRC2rZkfQlSIqs81INA3tFZt25Z10dU0Plb0vQIGs2gZ3AL2q8VTd7z4k5GY6CF7IJ53W6LbNNup0Vbln4H2CNn1wYLRKIEXhvRxhQpJepC6nNeCvr/8BeY/GxT6xRStIfwLIWkRZVJoJVhkDS9vkV6mSckXZu11OcQ0eiH34BxVB4/b0kvknUoioEgQIDAQAB
        -----END PUBLIC KEY-----        

zuul:
prefix: /api
sensitive-headers:
  routes:
m1-service:
  path: /M1/**
  service-id: m1-service       
m2-service:
  path: /M2/**
  service-id: m2-service 
m3-service:
  path: /M3/**
  service-id: m3-service                   
...