2009-04-11 68 views
2

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

第三方网站如何能够访问这些服务?他们需要将主体/身份传递给服务,对吧?

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

我对WCT/REST很陌生,所以不知道应该怎么做。

回答

2

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

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

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

由于jQuery在制作端点的HTTP请求时,正在浏览器的上下文中执行此操作,因此jQuery制作的HTTP请求(只要jQuery是从您的表单身份验证网站的同一根加载的)包含身份验证Cookie。

0

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

从理论上讲,令牌有效期如此之久,并且在请求中传递给它等等。尽管如此(恕我直言),它并不是很RESTy。但是,您基本上提供了一种方法,它返回令牌,也许还有一个日期(用于其他应用程序记住),然后另一个应用程序使用该令牌直至过期,这是它必须请求新令牌的时间。