Что я должен передать для заголовка 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 - если спецификация не устарела без еще нет.