Подтвердить что ты не робот

Управление сеансом: как создать токен аутентификации для службы REST? (Джерси)

Я пытаюсь реализовать управление сеансом в своей службе REST. Я узнал эти рекомендации во время серфинга:

  • Не использовать сеансы на стороне сервера - это нарушает принцип RESTful.

  • Использование проверки подлинности HTTP Basic. Невозможно прямо сейчас, так как меня просят не использовать SSL/TLS (что, без сомнения, необходимо для Basic auth.)

  • Использование Http digest - я слышал, что это увеличивает сетевой трафик. Это звучит дорого, особенно когда мой клиент является мобильным устройством.

  • Использование файлов cookie - мне сказали, что я никогда не должен полагаться на cookie для защиты моих важных ресурсов, их можно легко подделать. Кроме того, я читал о межсайтовых скриптовых атаках через файлы cookie.

  • У меня остается возможность генерировать токен аутентификации, который пользователь должен отправлять каждый раз, что я допускаю, не полностью "RESTful".

Теперь мне нужно знать, как мне сгенерировать эти уникальные маркеры проверки подлинности, которые достаточно безопасны на уровне бизнеса? Есть ли какая-нибудь библиотека для Джерси? Должен ли я пойти на OAuth.. Я только что прочитал о них, полезны ли они в моем случае? Имейте в виду, что мои целевые клиенты - это мобильные устройства - могут ли они получить доступ к службе OAuth?

4b9b3361

Ответ 1

Для простоты я генерирую свой собственный токен аутентификации, используя UUID перед тем, как зашифровать весь токен с помощью 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);

Ключ содержит creationDateTime, чтобы я мог использовать его для проверки времени жизни. Таким образом, если пользователь использует один и тот же токен аутентификации через X минут, он больше не будет работать, и я верну 403 запрещенный код.