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

Aid*_*api 37 rest http xmlhttprequest http-status-codes http-status-code-401

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

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

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

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

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

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

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

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

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

ben*_*man 22

回答你的问题:

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

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

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

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

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

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

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