2016-11-23 7 views
1

Я создал веб-приложение, которое в основном запрашивает у пользователя учетные данные с формой (для случайной сторонней службы, зная, какой из них не имеет значения). После того, как пользователь заполнил форму с помощью токена стороннего сервисного приложения, запрос с токеном отправляется в бэкэнд приложения, бэкэнд получает токен и отправляет запрос сторонней службе, чтобы проверить, действительно ли токен , В этот момент сторонняя служба возвращает ответ на сервер с 200 - {randomObject: object} или 401 - Unauthorized.Каким должен быть код ответа при возникновении ошибки сторонним приложением?

Итак, вот мой вопрос: если сторонняя служба возвращает 401, если бэкэнд возвращает 200 - false или 401 - Unauthorized?

Я и мой коллега спорили об этом. Моя точка зрения заключается в том, что доступ к серверу приложения разрешен и параметры правильные (в запросе присутствует токен), поэтому ответ должен быть 200, но содержание ответа должно указывать на то, что маркер недействителен. Его точка зрения заключается в том, что, поскольку токен недействителен (поскольку сторонняя служба сообщает серверу), бэкэнд должен возвращать 401 - Unauthorized.

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

Спасибо

ответ

3

Я хотел бы пойти на либо 400 или 401.

401 может ввести в заблуждение, потому что доступ к вашему API не был несанкционированным.(Особенно, если ваш апи также требует аутентификации)

с другой стороны 400 может быть лучше:

The (Bad Request) код состояния 400 указывает на то, что сервер не может или не будет обрабатывать запрос из-за то, что воспринимается как ошибка клиента

+0

Справедливости ради следует сказать, что туманный сторонний токен - это ошибка клиента, спасибо за ваш ответ! – bastienbot

0

Об этом:

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

Наличие токена не означает, что запрос действителен. 401 Unauthorized, так как указаны недопустимые учетные данные. От httpstatuses.com:

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

Если вы думаете, что должно быть 200, так как учетные данные не для вашей службы, но и для обслуживания третьей стороны и поэтому разрешение на ваш сервис не подведет, что можно было бы утверждать, но в этом случае вы, вероятно, не хотите возвращать 200, но вместо этого 400 Bad Request, поскольку параметры для успешного завершения операции API недействительны.

1

Я бы сказал, что это должно быть еще 401. Работа вашего сервера не должна влиять на приложение в том смысле, что его внутренняя работа не важна для конечного пользователя. Тот факт, что ваша служба аутентификации говорит вам, что это недействительно, должно быть достаточно, чтобы вы могли выбросить эту ошибку.

0

Я переломить тенденцию немного и сказать, что вы должны вернуться 200.

код состояния 401 связан с аутентификацией HTTP. W3C имеет следующий код:

Для запроса требуется аутентификация пользователя. Ответ ДОЛЖЕН включать поле заголовка WWW-Authenticate (раздел 14.47), содержащее вызов , применимый к запрашиваемому ресурсу. Клиент МОЖЕТ повторить запрос с подходящим полем заголовка полномочий (раздел 14.8). Если запрос уже включил учетные данные авторизации, то ответ 401 указывает, что для этих учетных данных было отказано в авторизации. Если ответ 401 содержит ту же проблему, что и предыдущий ответ , и пользовательский агент уже предпринял попытку выполнить проверку подлинности хотя бы один раз, тогда пользователю ДОЛЖНО представить объект , который был указан в ответе, поскольку этот объект может включать диагностическая информация.

(source)

Поскольку сервер предположительно не использует сам HTTP аутентификации, не будет возвращать заголовок WWW-Authenticate с вызовом, поэтому вы не будете следовать этой спецификации правильно. API-адрес третьей стороны, который вы вызываете, может сделать это правильно, но это выполняется by by. Ваш пользователь запросил у вас страницу, а не сторонний API напрямую, и они : уполномочены делать это. Ваш сервер имеет не решил, что они не достойны действительного ответа - чужой сервер только что сказал вам, что их токен недействителен.

Учитывая это, я бы вернул 200. У запроса есть. Ваш сервер может возвращать информацию, указывающую, что вызов стороннего API не удался.

+0

То, что вы объяснили, это именно моя точка зрения, но, как вы можете видеть, у людей есть другое мнение по этому поводу. Спасибо за ваш ответ ! – bastienbot

 Смежные вопросы

  • Нет связанных вопросов^_^