41

我正在创建一个 RESTful 服务来向 Web 应用程序提供数据。我对此有两个相关的问题。

1.如何处理未经授权的请求?

我打算使用以下代码响应请求:

  • 资源是否打开并找到?200 好
  • 您是否需要通过身份验证才能访问资源?401未经授权
  • 您无法访问某一类别的资源吗?403 禁止
  • 您是否有权访问某一类别的资源,但不能访问该特定资源?404 Not Found以防止人们知道他们无权访问的资源的存在。
  • 资源不存在吗?404 未找到

这是 RESTful 服务的推荐方式吗?

2. WWW-Authenticate401 响应应该提供什么标头?

我在Wikipedia上读到(可能不是最准确的资源,但它对我有用),401 响应必须包含WWW-Authenticate标头,但是在进一步搜索后,我真的找不到任何说明这个值的含义和应该是什么的资源.

我发现了几个关于这个标题的 SO 问题和论坛主题,它们似乎都是关于 OAuth,建议不要使用 401 状态代码,或者说你可以编造一些东西。

此标头应包含的正确值是多少?

4

2 回答 2

25

要回答您的问题:

如何处理未经授权的请求?

您描述的方式几乎是 RESTful 服务的推荐方式。据我所知,这绝对没有错。

401 响应应该提供什么 WWW-Authenticate 标头?

通常,WWW-Authenticate标头告诉客户端服务器将接受哪种身份验证。如果客户端发出未经授权的请求,这意味着他正在发送一个带有丢失或无效Authorization标头的请求,服务器将使用WWW-Authenticate来告诉客户端他将接受哪种身份验证方案(即基本、摘要或 OAuth)以及适用于哪个领域。

把它想象成服务器方面的某种识别问题或挑战,例如“你是谁?” 或“通过以下方式提供凭据来证明您的身份!”。

例如:WWW-Authenticate: Basic realm="My App"

在这里,服务器告诉客户端他使用了一个名为 Basic 的身份验证方案。领域只不过是一些标识服务器上受保护空间的字符串。

于 2013-07-16T22:30:14.473 回答
0

根据我的研究(谷歌搜索),我决定发送:Newauth realm="use login token"。

网站http://greenbytes.de/tech/tc/httpauth/#unknown有针对不同身份验证方法的测试用例,我没有找到任何描述“获取身份验证令牌”的内容,因此我认为它是“新身份验证”。

对我来说也很重要:这不会在客户端创建登录提示。

于 2015-03-23T10:41:17.620 回答