有关为何已请求403 HTTP请求的详细信息

时间:2019-11-21 14:57:10

标签: rest http

我正在使用RESTful API。我有一个复杂的授权条件:假设您有三个不同的条件(可以将它们分别称为A,B和C),则可以访问API。当不满足其中一个条件时,服务器将响应“ 403禁止”(如果用户应该登录,则为“ 401未授权”,或者基于安全性考虑,返回“ 404未找到”)。但是,我也想提供关于授权失败原因的反馈,根据失败的情况显示不同的友好错误。我知道404没有主体(我也不想发送一个主体),而401和401应该仅具有身份验证方案来帮助用户进行身份验证。

是否可以发送诸如403(“原因:A”)或403(“原因:C”)之类的响应?

1 个答案:

答案 0 :(得分:1)

  

我知道404没有身体[...]

您似乎把事情搞砸了。尽管带有204的响应必须没有响应正文,但是与404一起发送响应正文没有错。

  

是否可以发送403(“原因:A”)或403(“原因:C”)之类的响应?

您当然可以返回有关请求被forbidden的原因的详细信息(请注意不要泄露太多可能被恶意用户利用的信息)。

看看RFC 7807,它定义了简单的JSON和XML文档格式,以通知客户端HTTP API中的问题。这是报告API错误的一个很好的起点,并且还定义了application/problem+jsonapplication/problem+xml媒体类型。

作为参考,请查看此类RFC提供的示例:

HTTP/1.1 403 Forbidden
Content-Type: application/problem+json
Content-Language: en

{
  "type": "https://example.com/probs/out-of-credit",
  "title": "You do not have enough credit.",
  "detail": "Your current balance is 30, but that costs 50.",
  "instance": "/account/12345/msgs/abc",
  "balance": 30,
  "accounts": ["/account/12345",
               "/account/67890"]
}