AJAX / oData身份验证的HTTP响应和标头?

时间:2011-07-08 20:20:04

标签: ajax azure openid odata wif

当身份验证cookie过期并且需要续订时,oData或AJAX服务应如何响应?

时服务器应该向客户端发送什么
  1. 禁止oData或AJAX服务访问(拒绝访问)

  2. 当会话凭据过时且需要续订时,可能通过重定向到ADFS,OpenID或Azure ACS IDP

  3. 只需查看维基百科,我就可以猜测我应该为第一个场景发送403.x的某个版本,为第二个场景发送401.

    请确认上述内容是否正确,以及我应该在响应标题和正文中包含的内容。

    我认为不正确的一些例子执行以下操作:

    • 无声地错误输出AJAX服务并返回无数据
    • 尝试将AJAX调用重定向到IDP
    • 将错误文本发送到非JSON格式的客户端

2 个答案:

答案 0 :(得分:1)

使用HTTP状态代码始终是安全的,而不是烹饪您自己的令牌或任何类似的东西。

由于OData的基本原理是使任何知道如何通信HTTP的客户端成为可能,因此围绕HTTP状态代码是有意义的。客户将决定如何处理特定的状态代码。

答案 1 :(得分:0)

HTTP状态代码是可行的方法。 OData特别没有定义已在较低级别实现的任何内容(例如安全性和身份验证)。

401表示Unauthenticated,403表示Unauthorized。对于secnario 1,您只能说“拒绝访问”,而不是 为什么 您拒绝访问。用户是否未通过身份验证?然后返回401.用户是否经过身份验证但缺少权限?然后返回403。

对于方案2,我同意,返回详细的401状态(即为您的身份验证提供程序提供有效的“WWW-Authenticate”标头。)

我推荐的维基百科文章(你可能已经发现了这个)是:https://secure.wikimedia.org/wikipedia/en/wiki/List_of_HTTP_status_codes

希望这有助于某人。 : - )