当会话令牌无效时我应该使用啥状态码?

Posted

技术标签:

【中文标题】当会话令牌无效时我应该使用啥状态码?【英文标题】:What status code should I use when session token is invalid?当会话令牌无效时我应该使用什么状态码? 【发布时间】:2014-01-03 23:19:17 【问题描述】:

在创建 Web 服务 (RESTful) 时,如果会话令牌无效,我应该使用什么状态码? 目前我公司的那个给我发了一个404,没有找到,但我认为这是不正确的,因为资源存在。 也许我应该使用 401 Unauthorized。 你怎么看?您建议我在这种情况下使用什么状态码?谢谢。

【问题讨论】:

【参考方案1】:

401 未经授权。

您现有的会话令牌不再授权您,因此您是未经授权的。

不要忘记会话令牌只是避免为每个请求提供凭据的捷径。

发送 404 是不正确的,因为如您所见,资源确实存在。只是您目前无权查看它。

注意不要使用 403 Forbidden; HTTP 规范将其定义如下:“服务器理解请求,但拒绝执行它。授权将无济于事,并且不应重复请求。”这不适用于这种情况,因为授权会有所帮助。

【讨论】:

没有。 498 是专有产品使用的非官方代码。 404 会不会更“安全”,因为我不会透露存在这样的路径。 @user3711421 我会在检查资源是否存在之前检查凭据,因此即使稍后资源可能实际上不存在,也会在没有有效凭据的情况下返回 401。所以 401 没有说明你的资源。它可以帮助您考虑一个入口处受读卡器保护的建筑物的类比。如果您没有有效的钥匙卡,知道您想去 40 楼的 10 号房间并不能帮助您——反正您也进不去。 40层是否有10号房间(或者建筑物中是否有那么多楼层)无关紧要。 但是如果我知道40楼10号房间存在的信息,我可以继续尝试不同的卡。如果我不知道 40 楼的 10 号房间,我什至不知道我是否正在寻找一个存在的房间。现在我想到了一个既有开放端点又有经过身份验证的端点的系统。 @user3711421 1) 401 不会告诉您“40 楼的 10 号房间”是否存在。 2)通过默默无闻的安全性。迟早会传出“40 楼 10 号房间”存在的消息。那么你最好有安全的“钥匙卡”。【参考方案2】:

查看HttpStatusCode enum,我认为Unauthorized 可能最接近您要查找的内容。

查看那里的列表,并阅读每个列表的说明。

【讨论】:

我更喜欢使用权威来源:w3.org/Protocols/rfc2616/rfc2616-sec10.html @Colin'tHart 这绝对是一个很好的来源。虽然它很长。 MSDN 链接可作为一个很好的快速参考(实际上我只是在 Visual Studio 中输入了((HttpStatusCode).,它会为您提供此列表)。

以上是关于当会话令牌无效时我应该使用啥状态码?的主要内容,如果未能解决你的问题,请参考以下文章

InvalidClientTokenId:请求中包含的安全令牌无效。状态码:403

HTTP状态码404是啥意思?

下游提供无效数据时向客户端发送 Http 状态码

更改密码后 Parse 中的会话令牌无效

HTTP 状态码 200(缓存)与状态码 304 有啥区别?

服务器关闭时出现啥异常或 http 状态码