Как создать API RESTful для проверки учетных данных пользователей?

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

Ответ 1

Хорошим подходом является выполнение запроса 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"
}

Ответ 2

Обычно для передачи конфиденциальных данных через HTTP GET запрос обычно считается плохой практикой.

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

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

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

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

Ответ 3

Из Википедии:

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

Поскольку сервер не сохраняет состояние сеанса от клиента, ваш API не должен выставлять возможности входа/выхода. В каждом запросе вы должны отправлять учетные данные пользователя, и сервер должен проверять их каждый раз.

Проверьте эту дискуссию в формате SO, она замаскирует это понятие.

Ответ 4

Я согласен с Карлосом - в нормальном спокойном API нет сеанса, поэтому вы не можете аутентифицироваться один раз, а затем повторно использовать сеанс, вам действительно нужно будет передать учетные данные, установленные для каждого вызова (не идеально).

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

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

Ответ 5

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

С настройкой заголовка авторизации.