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 :

  1. Nieużywanie sesji po stronie serwera-narusza to zasadę RESTful.

  2. 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.)

  3. 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.

  4. 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.

  5. 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 ??

Author: Jaguar, 2011-02-11

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.

 38
Author: limc,
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