RESTful HTTP API中的授权,401 WWW-Authenticate

时间:2013-07-16 22:10:51

标签: http rest xmlhttprequest http-status-codes http-status-code-401

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

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

我打算用以下代码回复请求:

  • 资源是否已打开并找到? 200 OK
  • 您是否需要通过身份验证才能访问资源? 401未经授权
  • 您是否可以访问某类资源? 403 Forbidden
  • 您是否可以访问某类资源,但不能访问此特定资源? 404 Not Found ,以防止人们了解他们无法访问的资源的存在。
  • 资源不存在吗? 404 Not Found

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

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

我在Wikipedia上阅读(可能不是最准确的资源,但它对我有用)401响应必须包含WWW-Authenticate标题,但是在进一步搜索时我真的找不到任何说明这个值意味着什么以及应该是什么的资源。

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

此标头应包含的正确值是什么?

2 个答案:

答案 0 :(得分:21)

回答你的问题:

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

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

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

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

想象一下,它就像服务器上的某种识别问题或挑战,即“你是谁?”之类的东西。或者“通过以下方式提供证书证明你是谁!”。

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

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

答案 1 :(得分:0)

基于我的研究(谷歌搜索)我决定发送:Newauth realm =“使用登录令牌”。

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

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