Аутентификация/авторизация REST

Мне нужны советы по защите моего приложения:

У меня есть служба REST, используя Spring MVC 3

У меня есть мое клиентское приложение, используя Ext GWT 2.2

Учетные данные пользователей доступны только на стороне сервера.

Доступный SSL

Услуги REST должны использоваться только аутентифицированными пользователями.

Я прочитал о HTTP-дайджесте, авторизации на токенах, oAuth и т.д., но мне нужны некоторые разъяснения и советы о том, как защитить мое приложение и какие методы являются лучшими в моем случае.

Ответы

Ответ 1

вот методология, которую мы создали для наших приложений, работает очень хорошо и очень безопасна.

Это очень концептуальное объяснение, есть много кода, который поддерживает это, FYI

  • Когда пользователь аутентифицирует или создает учетную запись, сервер возвращает сертификат x.509, закодированный base64, который уникален для пользователя. Сервер хранит копию.

  • Каждый раз, когда клиент должен обращаться к REST API, клиент создает строку JSON, состоящую из следующих.

  • Уникальный идентификатор пользователя (UserID)

  • GUID или UUID, который гарантирует, что этот вызов уникален, (CallID) (защищает от повторных атак)
  • Словарь (набор ключей/значений) каждого параметра остального вызова

мы затем шифруем эту строку открытым ключом x.509 и кодируем ее обратно в строку base64 и берем это зашифрованное значение и добавляем UserID в объект json, который мы вызываем токен.

Затем мы помещаем токен в заголовок каждого вызова и вызываем его как-то вроде: X-Auth-UserToken

При каждом вызове сервер принимает маркер, просматривает сертификат пользователя на основе идентификатора пользователя, а затем проверяет, может ли зашифрованная часть маркера быть расшифрована с помощью закрытого ключа, который сервер хранит для пользователя.

после дешифрования сервер принимает CallID и проверяет, что он уникален, против своего собственного calllog db.

если он проверяется, пользователь аутентифицируется.

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

конечно, все вышеперечисленное выше SSL.

сообщите мне, если вам нужно, чтобы я развернулся на любых участках.