2009-04-11 28 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。但是,您基本上提供了一種方法,它返回令牌,也許還有一個日期(用於其他應用程序記住),然後另一個應用程序使用該令牌直至過期,這是它必須請求新令牌的時間。