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

j0n*_*0ni 36 rest http http-response-codes

我正在编写一个小应用程序,它公开了一个简单的REST-ish HTTP API.由于缺乏授权,我一直试图决定如何发出失败信号.

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

我的问题是用于拒绝未授权请求的明显HTTP状态代码"401 Unauthorized",是根据"WWW-Authenticate"标头指定的.见rfc2616 sec 10.4.2.

响应必须包含WWW-Authenticate头字段(第14.47节),其中包含适用于所请求资源的质询.

我不敢相信这是一个不寻常的问题.简单地重载401以包含更多一般用途是否常见?那些浏览器弹出auth/e对话框(顺便提一下,我在测试中没有看到,所以也许POST不会发生)?

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

tva*_*son 36

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

  • 如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因.如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到).(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) (2认同)
  • @vquintans 404 not found 在这种情况下似乎可能不明确。假设客户端请求可能存在或可能不存在但没有 cookie 的特定资源?您如何解释 404 错误?是否因为资源不可用或身份验证错误而失败。我会坚持明确表明需要授权的回应。 (2认同)

yfe*_*lum 9

返回这样的东西:

HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login
Run Code Online (Sandbox Code Playgroud)