令牌已过期 - JSON REST API - 错误代码

Bud*_*Joe 70 rest web-services api-design

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

sui*_*ing 75

您应该返回401 Unauthorized状态代码.您可以另外提供超媒体来再次建立令牌

想想在Web应用程序中发生的事情.你去说一个银行网站.如果未进行身份验证,则会将您发送到登录页面.然后你登录,你很高兴一段时间.然后它过期,循环重复.

只是一个想法.


小智 32

根据规范rfc6750 - "OAuth 2.0授权框架:承载令牌使用",https://tools.ietf.org/html/rfc6750 ,第8页,第3.1节,资源服务器应该返回401:>

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

  • 注意_应该_与_必须_。作为调用者,能够依赖 401 就好了。哦,好吧。 (3认同)

ryn*_*nop 11

FWIW Facebook使用400自定义JSON响应.我个人更喜欢401自定义JSON响应.

这是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
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 有些东西告诉我Facebook应该被视为例外,而不是发展的指导方针.只是说. (23认同)
  • 对于授权服务器或资源提供商,它是对Facebook的调用吗?授权服务器应返回400:https://tools.ietf.org/html/rfc6749#section-5.2,但资源提供者应返回401 (4认同)