2017-02-19 3 views
1

Standardmäßig arbeitet Spring Security, indem sie den JSESSIONID-Cookie zu Ihrer Sitzung hinzufügt. Und ich habe viele Header-basierte Formen verwendet und gesehen, um das gleiche Ergebnis zu erzielen (oft unter Verwendung eines oder mehrerer Filter). Aber ich denke, das sollte ich in der Konfiguration einstellen können. In Form von so etwas wie diese:Spring Security-Header-basierte Authentifizierung

config.setTokenLocation(TokenLocationEnum.HEADER) 
config.setTokenName("Bearer") 

oder

config.setTokenLocation(TokenLocationEnum.COOKIE) 
config.setTokenName("JSESSIONID") 

Das mag ich mich versuchen, die Umsetzung aber ich würde zuerst zu sehen, ob jemand irgendwelche Einwände gegen die Idee hat und warum es ist noch nicht implementiert.

Dank

Antwort

1

Sie können Spring Security konfigurieren, wie Sie möchten. Session-Management über JSESSIONID funktioniert nur out-of-Box. Wenn Sie beispielsweise Bearer OAuth 2.0-Token verwenden möchten, müssen Sie AuthServer konfigurieren. Dies ist Beispiel für die Konfiguration von einem meiner Projekte:

@EnableAuthorizationServer 
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter 
{ 
    private final AuthenticationManager authenticationManager; 

    private final InGridSecurityProperties inGridSecurityProperties; 

    @Autowired 
    public AuthorizationServerConfig(AuthenticationManager authenticationManager, InGridSecurityProperties inGridSecurityProperties, GoogleConnectionFactory connectionFactory) { 
     this.authenticationManager = authenticationManager; 
     this.inGridSecurityProperties = inGridSecurityProperties; 
     this.connectionFactory = connectionFactory; 
    } 

    @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception 
    { 
     clients.inMemory() 
         .withClient(inGridSecurityProperties.getClientId()) 
         .secret(inGridSecurityProperties.getClientSecret()) 
         .authorities("ROLE_TRUSTED_CLIENT") 
         .authorizedGrantTypes(inGridSecurityProperties.getGrantTypes()) 
         .scopes(inGridSecurityProperties.getClientScope()) 
         .accessTokenValiditySeconds(
             inGridSecurityProperties.getAccessTokenValiditySeconds()) 
         .refreshTokenValiditySeconds(
             inGridSecurityProperties.getRefreshTokenValiditySeconds()); 
    } 

    @Override public void configure(AuthorizationServerSecurityConfigurer security) throws Exception 
    { 
     security.tokenKeyAccess("isAnonymous() || hasAuthority('ROLE_TRUSTED_CLIENT')") 
         .checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')"); 
    } 

    @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) 
        throws Exception 
    { 
     endpoints 
         .authenticationManager(authenticationManager) 
         .tokenStore(jwtTokenStore()) 
         .tokenEnhancer(jwtAccessTokenConverter()); 
    } 


    @Bean 
    public JwtAccessTokenConverter jwtAccessTokenConverter() 
    { 
     JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); 
     KeyPair keyPair = new KeyStoreKeyFactory(
         new ClassPathResource(inGridSecurityProperties.getJwtKeyStore()), 
         inGridSecurityProperties.getJwtKeyStorePassword().toCharArray()) 
         .getKeyPair(inGridSecurityProperties.getJwtKeyPairAlias(), 
             inGridSecurityProperties.getJwtKeyPairPassword().toCharArray()); 
     converter.setKeyPair(keyPair); 
     return converter; 
    } 


} 

Weitere Informationen, die Sie in Spring Security-Dokumentation finden Sie unter: http://docs.spring.io/spring-security/site/docs/current/reference/

+0

Vielen Dank für die große Resonanz Evgeniy Ich gebe zu, ich muss an meinem knowlage von der auffrischen AuthorizationServerConfigurerAdapter was ich gerade mache. Aber mein Hauptanliegen war Bequemlichkeit, wie ich bereits erwähnt habe, konnte ich es mit Filtern arbeiten, die mich auch sehr unglücklich machten, zusammen mit dem gelegentlichen SecurityContextHolder.getContext(). SetAuthentication (auth), da es ein bisschen hacky fühlte. Ich bin sehr gespannt darauf, mehr über den Autorisierungsserver zu erfahren. Ist dies die einzige Klasse, die Sie hinzufügen müssen, um die tokenbasierte Authentifizierung zu erhalten oder gibt es sonst noch etwas, das ich mir anschauen sollte danke –

Verwandte Themen