Http RESTful API中的信令身份验证失败

Http RESTful API中的信令身份验证失败,http,rest,http-response-codes,Http,Rest,Http Response Codes,我正在编写一个小应用程序,它公开了一个简单的REST HTTP API。由于缺乏授权,我一直在努力决定如何发出故障信号 应用程序没有用于身份验证的API,而是取决于是否存在包含客户端通过其他服务获得的会话令牌的cookie。应用程序验证会话,并使用通过验证过程获得的身份执行特定于应用程序的授权。客户端无法直接对此应用进行身份验证 我的问题是,拒绝未授权请求的明显HTTP状态代码“401 unauthorized”是根据“WWW Authenticate”头指定的。看 答复必须包括以下内容: WW

我正在编写一个小应用程序,它公开了一个简单的REST HTTP API。由于缺乏授权,我一直在努力决定如何发出故障信号

应用程序没有用于身份验证的API,而是取决于是否存在包含客户端通过其他服务获得的会话令牌的cookie。应用程序验证会话,并使用通过验证过程获得的身份执行特定于应用程序的授权。客户端无法直接对此应用进行身份验证

我的问题是,拒绝未授权请求的明显HTTP状态代码“401 unauthorized”是根据“WWW Authenticate”头指定的。看

答复必须包括以下内容: WWW验证标头字段(第节) 14.47)包含适用于请求资源的质询

我不敢相信这是一个罕见的问题。简单地重载401以包含更一般的用途是常见的吗?浏览器弹出auth/e对话框(顺便说一句,我在测试中没有看到这些对话框,所以帖子可能不会出现这种情况)怎么样


底线:在这种情况下使用401可以吗,或者有更好的解决方案吗?

返回如下内容:

HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login

通常,如果客户端可以进行身份验证并解决问题,您会发送401,但由于您没有在API中提供身份验证方法,因此我建议改为返回403错误(禁止)。这将不需要标头,并向客户端指示它无法访问服务

如果您使用的是cookie,那么它不是RESTful API。REST服务的定义是无状态的。公平点——我将我的描述改为REST ish,而不是RESTful。那么,您认为答案是正确实现每个请求的身份验证,还是放弃我的RESTishness尝试?很难说,这取决于您的应用程序。REST方法有一些优点。如果您想继续使用服务器端会话,我会像tvanfosson所说的那样返回403。如果请求方法不是HEAD,并且服务器希望公开请求未实现的原因,那么它应该在实体中描述拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)。()@vquintans 404未找到在本例中似乎不明确。假设客户端请求的特定资源可能存在,也可能不存在,但没有cookie?您如何解释404错误?是否因为资源不可用或身份验证错误而失败。我会坚持明确表示需要授权的回答。是的,我同意。但无论如何,我认为从RFC中指出这种可能性是有趣的。我支持这一点。状态头是过去使用基本身份验证时发生的情况。浏览器只显示登录对话框三次(然后服务器返回“HTTP/1.1 XXX禁止”)。