我正在创建一个RESTful服务来为Web应用程序提供数据 . 我有两个相关的问题 .
1.如何处理未经授权的请求?
我打算用以下代码回复请求:
-
资源是否已打开并找到? 200 OK
-
您是否需要通过身份验证才能访问资源? 401 Unauthorized
-
您是否可以访问某类资源? 403 Forbidden
-
您是否可以访问某类资源,但不能访问此特定资源? 404 Not Found 以防止人们了解他们无法访问的资源的存在 .
-
资源不存在吗? 404 Not Found
这是RESTful服务的推荐方式吗?
2. 401响应应该提供什么WWW-Authenticate标头?
我在Wikipedia上阅读(可能不是最准确的资源,但它对我有用),401响应必须包含一个 WWW-Authenticate
Headers ,但是在进一步搜索时我找不到任何资源说明了这个值意味着什么以及它应该是什么是 .
我找到了几个有关此 Headers 的SO问题和论坛主题,它们似乎都是关于OAuth的,建议不要使用401状态代码或者说你可以做些什么 .
此标头应包含的正确值是什么?
2 回答
回答你的问题:
How to deal with unauthorized requests?
您描述它的方式几乎是RESTful服务的推荐方式 . 据我所知,这绝对没有错 .
What WWW-Authenticate header should 401 responses supply?
通常,
WWW-Authenticate
标头告诉客户端服务器将接受哪种身份验证 . 如果客户端发出未经授权的请求,这意味着他正在发送一个丢失或无效Authorization
标头的请求,服务器将使用WWW-Authenticate
告诉客户端他将接受哪种身份验证方案(即基本,摘要或OAuth)以及用于什么领域 .想象一下,它就像服务器上的某种识别问题或挑战,即“你是谁?”之类的东西 . 或者“通过以下方式提供证书证明你是谁!” .
例如:
WWW-Authenticate: Basic realm="My App"
这里服务器告诉客户端他使用名为Basic的身份验证方案 . 领域只不过是一些标识服务器上受保护空间的字符串 .
基于我的研究(谷歌搜索)我决定发送:Newauth realm =“使用登录令牌” .
网站http://greenbytes.de/tech/tc/httpauth/#unknown有不同身份验证方法的测试用例,我没有't found anything which describes '获取身份验证令牌' and therefore i think it is a ' Newauth' .
对我来说也很重要:这不会在客户端创建登录提示 .