Zarządzanie sesją: jak wygenerować token uwierzytelniania dla usługi REST? (Jersey)
Próbuję zaimplementować zarządzanie sesją w mojej usłudze REST. Poznałem te wytyczne podczas surfowania :
Nieużywanie sesji po stronie serwera-narusza to zasadę RESTful.
Korzystanie z podstawowego uwierzytelniania HTTP-obecnie nie jest możliwe, ponieważ jestem proszony, aby nie używać SSL / TLS (co jest bez wątpienia potrzebne do basic auth.)
Korzystanie z http digest-słyszałem, że Zwiększa to ruch w sieci. Brzmi to kosztownie, zwłaszcza gdy mój klient to urządzenie mobilne.
Korzystanie z plików cookie-powiedziano mi, że nigdy nie powinienem polegać na plikach cookie do zabezpieczania moich ważnych zasobów, można je łatwo sfałszować. Poza tym czytałem o atakach skryptowych za pomocą Plików cookie.
Pozostaje mi możliwość wygenerowania tokena uwierzytelniającego, który użytkownik musi wysłać za każdym razem - co przyznaję, nie jest" całkowicie " RESTful.
Teraz muszę wiedzieć, jak powinienem wygenerować te unikalne tokeny uwierzytelniania, które są wystarczająco bezpieczne na poziomie biznesowym ? Jest jakaś biblioteka dla Jersey ? Powinienem iść do OAuth..Właśnie trochę o nich przeczytałem, czy są przydatne w moim przypadku ? Proszę pamiętać, że moimi docelowymi klientami są urządzenia mobilne - czy mogą uzyskać dostęp do usługi OAuth ??
1 answers
Dla uproszczenia, generuję własny token uwierzytelniania za pomocą UUID
przed zaszyfrowaniem całego tokenu za pomocą Jasypt:-
String key = UUID.randomUUID().toString().toUpperCase() +
"|" + someImportantProjectToken +
"|" + userName +
"|" + creationDateTime;
StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor();
...
// this is the authentication token user will send in order to use the web service
String authenticationToken = jasypt.encrypt(key);
Klucz zawiera creationDateTime
, więc mogę go użyć do sprawdzenia czasu życia. W ten sposób, jeśli użytkownik użyje tego samego tokena uwierzytelniania po X minutach, nie będzie już działać, a ja odeślę zakazany kod 403.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-22 22:13:42