Лучший способ реализовать аутентификацию для REST API

21

Мы разрабатываем социальные приложения для мобильных устройств. Каждое приложение использует веб-сервисы API RESTful. Когда я использую логин, я обычно храню имя пользователя и пароль где-то на устройстве. Затем я отправляю их и в ответ получаю доступ к своему профилю. Но я также знаю, что есть другой способ сделать это.

Кто-то генерирует токен с определенным алгоритмом, а затем отправляет его вместо имени пользователя и пароля для получения доступа.

Как мне это реализовать? Должен ли я отправлять этот токен вместе с любым другим запросом, кроме входа в систему?

Владимир Стажилов
источник
11
Это аутентификация , а не авторизация . Аутентификация = доказать, что вы тот, кем вы себя называете. Авторизация = доказать, что вам разрешено делать то, что вы просили.
tdammers
Я просто собирался добавить тот же комментарий к ответам! +1 вам @tdammers Я отредактировал все содержимое, чтобы авторизация в Google не привела вас сюда
Shiplu Mokaddim

Ответы:

14

Существует несколько способов реализации аутентификации в контексте RESTful, и более безопасно отправлять только токены вместо логина / пароля: вы можете легко сделать токены недействительными по таймауту или по некоторым другим критериям и попросить пользователя повторно пройти аутентификацию ,

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

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Теперь сервер может идентифицировать запрос по открытому ключу и сам рассчитать requestHash . Если оба хэша равны, то пользователь авторизуется.

Кстати, вы также должны использовать https для защиты связи через компьютерную сеть - это значительно уменьшит количество возможных проблем.

Аким
источник
9

oAuth является стандартом для этого, но есть и другие решения.

Не пытайтесь реализовать безопасность, токены и т. Д. Самостоятельно, поскольку это сложная и рискованная тема. Взять, например, посмотреть здесь:

/programming/4574868/securing-my-rest-api-with-oauth-while-still-allowing-authentication-via-third-pa

Люк Франкен
источник