Что я должен передать для заголовка WWW-Authenticate на 401, если я использую OpenID?
Спецификация HTTP указывает:
10.4.2 401 Несанкционированный
Запрос требует аутентификации пользователя. Ответ ДОЛЖЕН включать WWW-аутентификацию (раздел 14.47), содержащий запрос, применимый к запрашиваемому ресурсу.
Если единственная схема входа, которую я поддерживаю, это OpenID (или CAS, или токены OAuth и т.д.), что я должен помещать в это поле? То есть, как я могу указать, что клиенту необходимо предварительно аутентифицировать и создать сеанс, а не пытаться отправлять учетные данные вместе с каждым запросом?
Прежде чем ответить, "не отправляйте 401, отправьте перенаправление 3xx на страницу входа OpenID", а что касается не-HTML-клиентов? Как, например, будет ли Qaru реализовывать API, с которым может работать пользовательское программное обеспечение?
Ответы
Ответ 1
Согласно RFC2617 auth-scheme
может быть любым; если вы действительно хотите, чтобы 401 вы не технически нарушали спецификации, сделав что-то вроде WWW-Authenticate: OpenID realm="My Realm" location="http://my/login/location"
. Сказав это, поведение кода других людей, когда вы это делаете, конечно, undefined.: -)
Ответ 2
Существует OAuth Discovery spec, который указывает, что вводить в заголовок WWW-Authenticate - если спецификация не устарела без еще нет.