2017-08-31 189 views
0

我想爲web套接字連接實現基於令牌的認證。Spring STOMP基於令牌的安全性

我的後臺系統是服務器和機器客戶,如何發送和機和服務器,在這裏沒有用戶認證之間發送和接收信息過程中實現身份驗證。

@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 = ...;」上做的事情。我如何用令牌獲得原則?由於這裏沒有用戶存在的,只有一臺機器和後端服務器

+0

你問如何到無需用戶交互與服務器驗證客戶端並創建一個令牌在客戶端使用?或者你已經有一個令牌,並且你在問如何從令牌獲得一個委託人? – CamW

+0

如何在沒有用戶交互的情況下使用服務器驗證客戶端,並創建令牌以在客戶端上使用? – Amit

+0

您的應用程序如何加入客戶端設備?用戶是否下載並安裝它?你能提供更多關於客戶端應用程序性質的信息嗎? – CamW

回答

0

想你可以嘗試從春天的安全上下文中得到本金

SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
+0

但是如果沒有登錄,我可以得到原理嗎?因爲這裏只是溝通服務器和客戶端,這裏沒有涉及用戶.. – Amit

+0

有基於令牌的驗證。 http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/,所以不要使用登錄名/密碼,而是在http頭中包含一個標記。 Google for oauth http-basic的例子。不知道如何正確添加到網絡套接字。 – StanislavL

+0

謝謝,我會檢查.. – Amit

相關問題