Это концептуальный вопрос.
У меня есть клиентское (мобильное) приложение, которое должно поддерживать действие входа в систему для веб-службы RESTful. Поскольку веб-служба является RESTful, это означает, что клиент принимает имя пользователя / пароль от пользователя, проверяет это имя пользователя / пароль с помощью службы, а затем просто не забывает отправлять это имя пользователя / пароль со всеми последующими запросами.
Все остальные ответы в этой веб-службе предоставляются в формате JSON.
Вопрос в том, когда я запрашиваю веб-службу, просто чтобы узнать, действительны ли данное имя пользователя / пароль, должна ли веб-служба всегда отвечать данными JSON, сообщая мне об успешном или неудачном завершении, или должна ли она возвращать HTTP 200 с хорошими учетными данными и HTTP. 401 о неверных учетных данных.
Причина, по которой я спрашиваю, заключается в том, что некоторые другие службы RESTful используют 401 для неверных учетных данных, даже когда вы просто спрашиваете, действительны ли учетные данные. Однако я понимаю, что ответ 401 состоит в том, что они представляют собой ресурс, к которому вы не должны иметь доступ без действительных учетных данных. Но ресурс входа ДОЛЖЕН быть доступен для всех, потому что вся цель ресурса входа в систему - сообщить вам, действительны ли ваши учетные данные.
Другими словами, мне кажется, что запрос вроде:
myservice.com/this/is/a/user/action
должен вернуть 401, если предоставлены неверные учетные данные. Но просьба вроде:
myservice.com/are/these/credentials/valid
никогда не должен возвращать 401, потому что этот конкретный URL (запрос) авторизован с действительными учетными данными или без них.
Хотелось бы услышать хоть сколько-нибудь обоснованные мнения по этому поводу. Каков стандартный способ решения этой проблемы и является ли стандартный способ решения этой проблемы логически приемлемым?
authentication is required and has failed or has not yet been provided
применимо, поскольку вы не запрашиваете действительность учетных данных, а запрашиваете конкретный ресурс на основе предоставленных вами учетных данных.401 следует отправлять только тогда, когда для запроса требуется поле заголовка авторизации и авторизация не выполняется. Поскольку API входа в систему не требует авторизации, я считаю, что 401 - неправильный код ошибки.
Согласно стандарту здесь https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* 10.4.2 401 Неавторизованный
Запрос требует аутентификации пользователя. Ответ ДОЛЖЕН включать поле заголовка WWW-Authenticate (раздел 14.47), содержащее запрос, применимый к запрошенному ресурсу. Клиент МОЖЕТ повторить запрос с подходящим полем заголовка авторизации (раздел 14.8). Если запрос уже включал учетные данные авторизации, то ответ 401 указывает, что в авторизации для этих учетных данных было отказано. Если ответ 401 содержит тот же вызов, что и предыдущий ответ, и пользовательский агент уже попытался аутентифицироваться хотя бы один раз, то пользователю СЛЕДУЕТ представить объект, который был указан в ответе, поскольку этот объект может включать в себя релевантную диагностическую информацию. Аутентификация доступа HTTP объясняется в разделе «Аутентификация HTTP: базовая и дайджест-аутентификация доступа» [43]. *
источник
Верните 409 с правильным сообщением об ошибке.
источник