Что я должен передать за заголовок WWW-Authenticate на 401, если я использую только OpenID? - PullRequest
33 голосов
/ 02 июня 2009

Спецификация HTTP гласит:

10.4.2 401 Несанкционированный

Запрос требует аутентификации пользователя. Ответ ДОЛЖЕН включать WWW-Аутентификацию поле заголовка (раздел 14.47), содержащее запрос, применимый к запрашиваемому ресурсу.

Если единственная поддерживаемая мной схема входа - это OpenID (или CAS, или OAuth-токены и т. Д.), Что я должен указать в этом поле? То есть, как мне указать, что клиенту необходимо предварительно аутентифицировать и создать сеанс, а не пытаться отправлять учетные данные вместе с каждым запросом?

Прежде чем ответить, «не отправляйте 401; отправьте перенаправление 3xx на страницу входа в систему OpenID», как насчет клиентов, не использующих HTML? Как, например, Stack Overflow может использовать API, с которым может взаимодействовать мое пользовательское программное обеспечение?

Ответы [ 2 ]

26 голосов
/ 06 июля 2009

Согласно RFC2617 auth-scheme может быть чем угодно; если вы действительно хотите 401, вы не технически нарушаете спецификации, придумывая что-то вроде WWW-Authenticate: OpenID realm="My Realm" location="http://my/login/location". Сказав это, поведение чужого кода при этом, конечно, не определено. : -)

3 голосов
/ 02 июня 2009

Существует спецификация OAuth Discovery , которая будет указывать, что помещать в заголовок WWW-Authenticate - если спецификация еще не устарела без спецификации замены.

...