【问题标题】:REST authentication representation from a browser来自浏览器的 REST 身份验证表示
【发布时间】:2013-12-02 19:26:18
【问题描述】:

我工作的公司已经开始创建 RESTful 服务,大部分开发工作外包。

我们的第一个服务是用于用户身份验证。当用户输入错误的用户名和密码时,浏览器会收到状态码 200,响应正文表示为:

{
    "state": "FAILED",
    "responseCode": 400,
    "timestamp": 1310378271300,
    "anies": [
        {
            "errorCode": "-6600",
            "errorType": "MSG_ERR_EMPTY_ACCOUNT_API_KEY",
            "translation": {
                            "lang": "en",
                            "value": "Provided login is empty"
                        },
            "property":"apiKey"
        },
        {
            "errorCode": "-6601",
            "errorType": "MSG_ERR_EMPTY_ACCOUNT_API_PASSWORD",
            "translation": {
                            "lang":"en",
                            "value":"Provided password is empty"
                        },
            "property": "apiPassword"
        }
    ]
}

浏览器与控制器交互,控制器又调用 Web 服务。我们还将让客户直接与服务交互。

上面的表示包含故障状态 (400)、内部错误代码,以便服务的客户端可以查找特定语言的错误以及浏览器将用来显示的错误的翻译屏幕。 “property”属性是错误对应的表单元素/参数。

这对我来说是不正确的。

  1. 浏览器是否应该收到状态码 400,然后查看失败的表示?
  2. 是否应该有翻译文本的属性,或者如果接受标头是 en、fr 等,那么已经翻译文本是否有意义?
  3. 还有什么其他人可以建议的吗?

谢谢

【问题讨论】:

标签: rest restful-authentication


【解决方案1】:

请参阅答案 here,了解为什么 400 响应可能是可行的方法。

更大的问题是状态码作为内容的一部分被返回。我认为为 API 调用返回正确的 400 状态会更有意义,并在内容中返回错误的详细信息。另外,我认为您是对的,包含 Accept-Language 标头并以请求的语言返回内容更有意义。

【讨论】:

  • 谢谢约翰。即使验证失败,您认为 浏览器 收到状态 200 是否仍然正确?
  • 我不会声称这里有正确的答案,但我在浏览器中执行此操作的方法是使用 Flash 消息重定向回引用 URL。所以我在重定向后得到了 200。我认为这对于应用程序流来说比做 400 更好,但其他人可能在这里有更好的想法。
  • 这里我只谈论直接的 HTML 浏览器体验。对于浏览器中的 ajax 调用,我会执行正常的 400 状态并使用 javascript 处理它。
【解决方案2】:

该服务不应返回 http 状态:200 ok,因为出现错误。它必须返回错误状态码:

  • 400 bad request 表示请求格式错误,例如没有发送用户名。
  • 401 unauthorized 表示用户名和密码不匹配,登录失败,或在需要权限的其他页面上,表示您必须先登录。
  • 403 no permission 表示您已登录,但您无权访问当前页面。

REST 仅通过错误处理提供状态代码建议,因此您在响应正文中返回的所有内容都可能取决于应用程序。如果您对此感到满意,请随意在错误消息格式中使用responseCode: 400...

【讨论】:

【解决方案3】:

400 表示错误请求(请参阅here)。在这种情况下使用不正确,请求很好,只是用户没有经过验证。我会返回响应代码 200 以及上面列出的详细信息。

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2016-12-14
    • 2014-02-15
    • 2012-12-13
    • 2015-07-19
    • 2019-04-06
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多