Я разрабатываю API для мобильного приложения, и я надеюсь сохранить его RESTful.
API разрешен с использованием Basic HTTP Auth, однако, когда пользователь впервые открывает приложение, ему необходимо сначала войти в систему, поэтому мне нужно разработать API для проверки учетных данных пользователя, который будет принимать пару имени пользователя и пароля, возвратите успех или потерпите неудачу соответственно.
проблема в том, что URL должен быть таким, чтобы он был спокойным? Я не думаю, что/логин - хороший.
Как создать API RESTful для проверки учетных данных пользователей?
Ответ 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
С настройкой заголовка авторизации.