2017-04-18 17 views
0

https://github.com/spring-projects/spring-framework/blob/master/src/docs/asciidoc/web/web-websocket.adoc#token-based-authenticationに従ってトークンベースの認証を実装しようとしています。SockJS/STOMP Webソケット用のSpringセキュリティ「トークンベースの認証」

私はHTTP認証のためにBasic Authを使用しています。したがって、認証が成功すると、Springはx-auth-tokenを返します。 STOMP CONNECTコマンドにこのトークンを追加します。

@Configuration 
@EnableWebSocketMessageBroker 
public class MyConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureClientInboundChannel(ChannelRegistration registration) { 
    registration.setInterceptors(new ChannelInterceptorAdapter() { 

     @Override 
     public Message<?> preSend(Message<?> message, MessageChannel channel) { 

      StompHeaderAccessor accessor = 
       MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); 

      if (StompCommand.CONNECT.equals(accessor.getCommand())) { 
       String authToken = accessor.getFirstNativeHeader("X-Auth-Token"); 
       log.debug("webSocket token is {}", authToken); 
       Principal user = ... ; // access authentication header(s) 
       accessor.setUser(user); 
      } 

      return message; 
     } 
    }); 
    } 
} 

しかし、私は "Principal user = ...;"でどのように行うのかは全く分かりません。トークンを使ってどのようにPrincipleを得ることができますか?いずれかの人が光を当てることができますか?

+0

助けることができています[WebSocket Authentication and Authorization in Spring]の複製(https://stackoverflow.com/questions/45405332/websocket-authentication-and-authorization-in-spring) –

答えて

0

OPTION

あなたのWebSocket CONNECTエンドポイントは、春が確保されている場合は、あなたがAuthentication auth = SecurityContextHolder.getContext().getAuthentication();を呼び出すことで、校長(別名ユーザー)を得ることができる必要があります。そこから、あなたはauth.getPrincipal()

オプションB

を呼ぶだろう、私は私のpersonnalyトークンベースの認証システムとしてJWTを使用しています。私はJWTに使用するライブラリは、このチュートリアルhttps://github.com/jwtk/jjwt

である私はトークン

public Authentication getAuthenticationFromToken(String token) { 
    if (token != null) { 
     UserDetails user = getUserFromToken(token); 

     if (user != null) 
      return new UsernamePasswordAuthenticationToken(user, user.getPassword(), user.getAuthorities()); 
    } 

    return null; 
} 

public UserDetails getUserFromToken(String token) { 
    Jws<Claims> jws = Jwts.parser() 
      .requireIssuer("myIssuer") 
      .setSigningKey("myBase64Secret==") 
      .parseClaimsJws(token); 

    String username = jws.getBody().getSubject(); 
    return userDetailsService.loadUserByUsername(username); 
} 

からユーザーを取得するためのメソッドを持っているカスタムJWTServiceはまた、あなたがセットアップJWT https://www.toptal.com/java/rest-security-with-jwt-spring-security-and-java可能

+0

私はマシンをバックエンドのWebソケット認証と認証に実装したい、そこにユーザーの原則はありません、どうすればいいですか? – Amit

+0

また、これを見てください:https://robertleggett.wordpress.com/2015/05/27/websockets-with-spring-spring-security/ – Marc

関連する問題