Я работаю над RESTful API, который включает стороннюю интеграцию. Мы используем OAuth с потоком кода авторизации для аутентификации против третьей стороны. Пользователь должен войти в нашу службу, а затем дополнительно к третьей стороне, чтобы наше приложение могло получить доступ к третьей стороне.HTTP API: сообщение о необходимости аутентификации третьей стороне
Некоторые из наших ресурсов требуют взаимодействия с третьей стороной (например, GET /third-party-userpic
). Если пользователь уже зарегистрировался в этой службе, мы извлечем токен доступа из нашего хранилища данных и будем использовать его для получения изображения пользователя, просто!
Если у нас нет действительных учетных данных для этого пользователя для этой службы, мы не можем получить изображение пользователя. Это произойдет при первом использовании и может также произойти, если полномочия истекают или аннулируются. В этом случае мы хотим сообщить клиенту, что им нужно посетить URI авторизации и начать поток OAuth.
Мои коллеги и я разработке этого обсудили несколько возможностей, в том числе:
- Возвращение
200 OK
успеха с указанием того, что аутентификация требуется или разрешается в теле ответа так или иначе. Это неэлегантно и не распространяется на ресурсы разных типов контента, а также требует, чтобы клиент знал, когда он обращается к ресурсу, который может потребовать эту схему аутентификации. - Возврат
403 Forbidden
вместе со ссылкой для аутентификации в заголовках или корпусе. Проблема в том, что это требует отличия от403 Forbidden
, сгенерированного из-за проблем с разрешениями, и не согласуется с тем, что мы хотим назвать403
. - Возврат
401 Unauthorized
. У этой проблемы возникает та же проблема, что и клиент, чтобы ее разломать от401
, сгенерированной нашей платформой, когда пользователь не вошел в систему. Существует дополнительная проблема, что401 Unauthorized
является частью схемы аутентификации HTTP-запроса, но мы не реализуя поток ответных реакций здесь. Клиент никогда не касается учетных данных. - Создание нового кода состояния
4XX
, позволяющего клиенту легко отделить это условие от других возможных сбоев. Это кажется самым чистым с технической точки зрения, но создание новых кодов статуса - это не то, что нам, вероятно, нужно делать!
'401 Unauthorized' требует вызова WWW-Authenticate. Какой вызов я бы использовал? – coppro
Я только что сделал быстрый поиск и придумал некоторые результаты, я буду обновлять ответ с дополнительной информацией с https://tools.ietf.org/html/rfc6750 – gevorg
После прочтения более https://tools.ietf.org/html/rfc6750 Я думаю, что мой ответ глуп как ад, я постараюсь обобщить то, что я узнал в отредактированной версии. – gevorg