43

我正在编写一个小应用程序,它公开了一个简单的 REST-ish HTTP API。由于缺乏授权,我一直在试图决定如何发出失败信号。

该应用程序没有用于身份验证的 API,而是依赖于包含客户端通过其他服务获取的会话令牌的 cookie 的存在。应用程序验证会话并使用通过验证过程获得的身份来执行特定于应用程序的授权。客户端无法直接向此应用程序进行身份验证。

我的问题是,用于拒绝未经授权的请求的明显 HTTP 状态代码“401 Unauthorized”是根据“WWW-Authenticate”标头指定的。见rfc2616 秒 10.4.2

响应必须包含一个 WWW-Authenticate 头字段(第 14.47 节),其中包含适用于所请求资源的质询。

我不敢相信这是一个不常见的问题。简单地重载 401 以包含更一般的用途是否很常见?浏览器弹出 auth/e 对话框怎么样(顺便说一下,我在测试中没有看到,所以也许 POST 不会发生这种情况)?

底线:在这种情况下使用 401 是否可以,还是有更好的解决方案?

4

2 回答 2

42

通常,如果客户端可以进行身份​​验证并解决问题,您会发送 401,但由于您没有提供在 API 中进行身份验证的方法,我建议改为返回 403 错误(禁止)。这不需要标头,并将向客户端指示它无法访问服务。

于 2009-10-24T18:58:54.423 回答
10

返回如下内容:

HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login
于 2009-10-24T18:57:58.557 回答