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

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

【问题讨论】:

    标签: web-services http rest restful-authentication


    【解决方案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).,它会为您提供此列表)。
    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 2013-07-23
    • 1970-01-01
    • 2010-12-11
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多