Prośba o poradę: uwierzytelnianie użytkownika przy połączeniu WebSocket

0

W nowej wersji Coyote, powiadomienia czy też wiadomości prywatne są przesyłane poprzez WebSockety. Dzięki temu powiadomienia będą w czasie rzeczywistym, a nie jak teraz - z opóźnieniem.

I tutaj pojawia się problem z uwierzytelnianiem użytkownika. Tuż po połączeniu z serwerem WebSocket, przesyłany jest token który ma uwierzytelnić danego, zalogowanego użytkownika. W tokenie zaszyfrowane jest ID użytkownika oraz timestamp. Token ważny jest godzinę. Wszystko działa dobrze, ale pojawił się problem. Załóżmy, że użytkownik ma długo otwartą kartę przeglądarka (ponad godzinę). Połączenie zostanie zerwane. Napisałem mechanizm który ponawia połączenie jednak po połączeniu ponownie zostaje przesłany token, który już wygasł. Tak więc połączenie nie zostanie nawiązane dopóki użytkownik nie odświeży strony (co wygeneruje ponownie aktualny token).

Czy macie jakiś pomysł aby rozwiązać ten problem? Być może wygasanie tego tokena po 1 godzinie jest zbyt gorliwe z mojej strony? Co myślicie?

0

jezeli uzytkownik przez godzine nie zauwazy ze ma nowe powiadomienie (zmienia sie karta, wyskakuje popup w chrome) to na pewno nie zauwazy pozniej (w sensie nie zauwazy od razu)
A po takim czasie i tak sie refreshuje strone by sprawdzic np czy jakies nowe odpowiedzi sa w danym topicu/dziale

0

@Adam Boduch - czyli będzie to wyglądało tak, że po (załóżmy) godzinie nieaktywności, nie będą wyskakiwały nowe powiadomienia lub peemki? Czy będzie tak jak teraz, że nawet kilka godzin nieaktywności nie nie zmienia?

0

Będą, będą pod warunkiem, że po godzinie nie zostanie zerwane połączenie z serwerem. Jeżeli będzie ok, to nic złego się nie stanie...

1

Token dla websocket jest inny niż ten związany z zalogoawaniem na stronę?
Nawet jeśli to czas życia tych tokenów powinien być ten sam.
Jeśli token traci ważność, oznacza to wyglancowanie ze strony, ergo nie widzę, sensu by nadal pokazywać powiadomienia.

0

A po co w ogóle automatycznie wylogowywać użytkownika po godzinie nieaktywności czy dwóch? To nie jest bank, żeby o bezpieczeństwo dbać; Więcej będzie z tym problemów ze zrezygnowania z tego bajeru.

0
furious programming napisał(a):

A po co w ogóle automatycznie wylogowywać użytkownika po godzinie nieaktywności czy dwóch? To nie jest bank, żeby o bezpieczeństwo dbać; Więcej będzie z tym problemów ze zrezygnowania z tego bajeru.

Źle mnie zrozumiałeś. Użytkownik nie będzie wylogowywany po godzinie. Może się jedynie zdarzyć, że z jakiś przyczyn połączenie z serwerem WebSocket zostanie zerwane i po prostu nie będzie otrzymywał informacji o nowych powiadomieniach do czasu aż odświeży stronę ponownie. Tylko tyle. Taka pierdoła. @fasadin napisał, żeby się tym nie przejmować póki co. Może przesadzam i ten token nie powinien po prostu wygasać po godzinie i tyle. Byłby jednak za każdym razem taki sam.

(tutaj pisałem długiego posta ale mi się skasował ;()

P.S. Widzę, że na githubie tez mają rozwiązanie oparte o token, który przesyłany jest do serwera websocket. Z tego co jednak widzę token jest generowany od nowa przy każdym odświeżeniu strony.

0

Teraz rozumiem; Mimo wszystko czas życia tokenu wydaje się bardzo krótki.

0

A nie można zrobić tak by w takim przypadku gdy co 1h może rozłączyć - żeby raz na godzinę wysyłać komendę podtrzymującą połączenie (tzn czas powinien być krótszy niż 1h w tym przypadku)? Ewentualnie przy odświeżaniu strony/przeglądaniu czegokolwiek resetować licznik czasu dla danego usera?

2

A dlaczego to nie jest ten sam token, który jest używany do podtrzymywania sesji? Po jakim czasie wygasa sesja?

0

Można by było w sumie użyć mechanizmu uwierzytelniania jaki używany jest w laravelu. Chciałbym jedynie uniknąć konieczności łączenia się z bazą danych po stronie serwera websocket. Myślałem bardziej o mechanizmie jaki używa github. Coś wymyślę :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1