【问题标题】:Token Expired - JSON REST API - Error Code令牌已过期 - JSON REST API - 错误代码
【发布时间】:2012-02-09 22:27:03
【问题描述】:

我有一个 JSON REST API。握手会给你一个有效期为 15 分钟的令牌。您在这 15 分钟内拨打的所有电话都应该可以正常工作。 15 分钟后,我返回了一个错误对象(包括代码、消息、成功 = false),但我也想知道应该返回什么 HTTP 错误代码?并且使用 HTTP 错误代码会弄乱某些客户端吗? (HTML5、iPhone、Android)。在这种情况下,最佳做法是什么?

【问题讨论】:

标签: web-services rest api-design


【解决方案1】:

您应该返回一个401 Unauthorized 状态代码。您可以另外提供超媒体来重新建立令牌

想想网络应用程序中发生了什么。你去说一个银行网站。如果没有经过身份验证,它会将您发送到登录页面。然后你登录,你很高兴去一段时间。然后它到期并重复循环。

只是一个想法。

【讨论】:

    【解决方案2】:

    根据规范 rfc6750 -“OAuth 2.0 授权框架:承载令牌使用”,https://www.rfc-editor.org/rfc/rfc6750,第 8 页,第 3.1 节,资源服务器应返回 401:

    invalid_token 提供的访问令牌已过期、已撤销、格式错误或 其他原因无效。资源应该响应 HTTP 401(未授权)状态码。客户可以 请求新的访问令牌并重试受保护的资源 请求。

    【讨论】:

    • 请注意 应该必须。作为呼叫者,能够依赖 401 会很好。哦,好吧。
    【解决方案3】:

    FWIW Facebook 使用 400 和自定义 JSON 响应。我个人更喜欢带有自定义 JSON 响应的 401。

    这是 FB 的回复正文:

    {
      "error": {
        "message": "Error validating access token: Session has expired on Jul 17, 2014 9:00am. The current time is Jul 17, 2014 9:07am.",
        "type": "OAuthException",
        "code": 190,
        "error_subcode": 463
      }
    }
    

    【讨论】:

    • 有些事情告诉我 Facebook 应该被视为例外,而不是开发指南。只是说。
    • 是对 Facebook 的调用,还是对授权服务器的调用,还是对资源提供者的调用?授权服务器应该返回 400 : tools.ietf.org/html/rfc6749#section-5.2 ,但是资源提供者应该返回 401
    猜你喜欢
    • 2018-05-27
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多