【发布时间】:2010-12-09 18:39:06
【问题描述】:
我正在编写一个小应用程序,它公开了一个简单的 REST 式 HTTP API。由于缺乏授权,我一直在努力决定如何发出失败信号。
该应用没有用于身份验证的 API,而是依赖于包含客户端通过其他服务获取的会话令牌的 cookie 的存在。应用程序验证会话并使用通过验证过程获得的身份来执行特定于应用程序的授权。客户端无法直接向此应用进行身份验证。
我的问题是,用于拒绝未经授权的请求的明显 HTTP 状态代码“401 Unauthorized”是根据“WWW-Authenticate”标头指定的。见rfc2616 sec 10.4.2。
响应必须包含 WWW-Authenticate 标头字段(部分 14.47) 包含适用于所请求资源的质询。
我不敢相信这是一个不常见的问题。简单地重载 401 以包含更一般的用途是否很常见?浏览器弹出 auth/e 对话框怎么样(顺便说一下,我在测试中没有看到,所以也许 POST 不会发生这种情况)?
底线:在这种情况下使用 401 可以吗,还是有更好的解决方案?
【问题讨论】:
-
如果您使用 cookie,它就不是 RESTful API。 REST 服务根据定义是无状态的。
-
公平点 - 我将描述更改为 REST-ish,而不是 RESTful。那么你认为答案是要么正确实现每个请求的身份验证,要么放弃我对 RESTishness 的尝试?
-
很难说,这取决于你的应用。 REST 方法有一些优点。如果您想继续使用服务器端会话,我会按照 tvanfosson 的说法返回 403。
标签: http rest http-response-codes