使用JQuery访问受保护的REST端点

时间:2009-04-11 05:58:55

标签: jquery wcf authentication rest

我有一个会员登录其帐户的网站(FormsAuth)。我想建立一个我可以使用jQuery访问的RESTful服务。我想使用相同的FormsAuth来保护这些服务。

第三方网站如何才能访问这些服务?他们需要将Principal / Identity传递给服务,对吗?

我只看过基本身份验证的例子(Twitter使用和jQuery支持)。

我对WCT / REST很新,所以不确定应该怎么做。

2 个答案:

答案 0 :(得分:2)

要记住的重要一点是,Forms身份验证基于Cookie工作。当客户端浏览器向服务器发送请求时,它会向每个请求发送cookie。如果服务器需要特定的cookie(如果您在特定URL上强制执行身份验证,则ASP.NET会将此作为一项要求)并且cookie不存在,那么就是您遇到未经授权的错误。

为了获取jQuery代码,客户端必须从主机页面请求它,主页面可以是通过Forms身份验证保护的ASP.NET页面。这是第一步 - 保护对jQuery代码本身的访问。您需要做的下一件事是安全访问RESTful端点。

如果您将.svc端点(假设您在IIS中托管RESTful WCF服务)放在与通过Web.config设置受Forms身份验证保护的应用程序一部分相同的目录中,那么ASP.NET将在WCF被告知请求之前拒绝对.svc端点的请求。通过这种方式,您可以在表单身份验证中包装WCF服务,而无需在服务中进行任何复杂的编码。

由于jQuery在发出端点的HTTP请求时,是在浏览器的上下文中进行的,因此从jQuery发出的HTTP请求(只要jQuery是从与表单身份验证的站点相同的根加载的)将包含身份验证cookie。

答案 1 :(得分:0)

您可以使其变得复杂并使用令牌。 Flickr是这种授权机制的一个例子。

理论上,令牌在某种程度上是有效的,并且你在请求等中传递它。虽然(恕我直言)但它并不是非常RESTy。但是你基本上提供了一种返回令牌的方法,也许是一个日期(另一个应用程序要记住),然后另一个应用程序使用该令牌直到它过期,这时它必须请求一个新的。