Вопрос по rest, api – Как разработать RESTful API для проверки учетных данных пользователя?

11

Я разрабатываю API для мобильного приложения и надеюсь, что он останется RESTful.
API авторизуются с использованием Basic HTTP Auth, однако, когда пользователь открывает приложение в первый раз, ему необходимо сначала войти в систему, поэтому мне нужно разработать API для проверки учетных данных пользователя, который будет принимать пару имя пользователя и пароль, верните успех или неудачу соответственно.
проблема в том, что URL должен быть таким спокойным? Я не думаю, что / логин хороший.

Ваш Ответ

5   ответов
9

sensitive data через HTTPGET запрос.

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

Почему это исключение? История браузера и журналы сервера будут хранитьGET Запросы. Это означает, что эта конфиденциальная информация видна как обычный текст в обоих местах. Так что, если кто-то овладеет одним из них - тогда эта информация находится в его руках.

Вы должны использовать HTTPPOST запросите передачу этой конфиденциальной информации в API RESTful, поскольку браузеры не будут их хранить, а серверы их не будут регистрировать. Тем не менее, первая линия защиты заключается в использовании безопасного HTTP (HTTPS) для обеспечения защиты этой информации от посторонних.

Так что передавайте эту информацию вbody HTTP-запроса на HTTPS URL.

6

The client–server communication is further constrained by no client context being stored on the server between requests. Each request from any client contains all of the information necessary to service the request, and any session state is held in the client.

Поскольку сервер не хранит состояние сеанса от клиента, ваш APIshouldn't expose any login/logout capability: В каждом запросе вы должны отправлять учетные данные пользователя, а сервер должен проверять их каждый раз.

Проверьтеэто обсуждение в SOЭто разъясняет эту концепцию.

0

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

В этом сценарии кажется, что вам лучше использовать один из openAuth (http://www.oAuth.net) - он работает путем аутентификации при первом запуске приложения, а затем генерирует токен доступа, чтобы разрешить доступ в каждом вызове (+ токен обновления).

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

да, ты прав wong2
на самом деле, я не держал cookie-файл сессии или что-то подобное wong2
Хорошо, так что я полагаю, вы должны передать учетные данныеusername / password с каждым звонком это правильно. Вы должны либо всегда передавать его, либо проходить один раз и отслеживать сеанс.
Да, я передаю набор учетных данных при каждом вызове, однако мне нужно войти в систему, чтобы проверить учетные данные пользователя, когда они открывали приложение в первый раз wong2
6

GET запрос информации об учетной записи / профиле текущего пользователя. и пусть он возвращает имя пользователя, настройки, URL-адрес аватара и т. д.me часто используется как сокращенный идентификатор аутентифицирующего пользователя.

GET https://api.example.com/profiles/me
HTTP/1.1 200 OK
{
  "username": "bob",
  "id": "xyz",
  "created_at": 123,
  "image_url": "https://example.com/bob.png"
}
0

GET https://api.example.com/auth

С установленным заголовком авторизации.

Похожие вопросы