2012-03-14 104 views
0

這裏是我的設置:如何從我的MVC網站訪問我自己的API?

我有一個MVC3網站與一個www子域(例如www.example.com)託管。我的網站通過SSL進行安全保護,並通過ASP.NET會員/角色提供商進行身份驗證。我有HTTP處理程序提供/服務下的服務功能(例如www.example.com/services)。這些通過基於SSL的基本身份驗證來保護。我有移動設備成功訪問/使用這些服務。我還創建了一個帶有api子域的新網站(例如api.example.com),它將成爲我面向公衆的API。這些服務目前通過WCF Web API預覽版6公開(最終將被遷移到ASP.NET Web API)。這些服務還通過基於SSL的基本身份驗證進行保護。我的ASP.NET成員資格實現存儲哈希密碼(即,它們未加密)。所有服務都提供JSON響應。所有這些東西都很棒。

這裏是我的困境:

我開始寫的MVC網站一個新的觀點,並意識到這將是巨大的,使用Ajax。我的具體情況是實現級聯下拉列表。我想實現這個使用jQuery和api子域下的一項新服務。起初,我認爲這將是一個簡單的練習,然後我意識到,我沒有有效的方法來調用我自己的API。我的客戶(移動設備)都在本地存儲他們的用戶名/密碼,所以這很容易。但是,如果同一用戶登錄到我的網站,我有他們的用戶名,但沒有他們的密碼,所以我沒有直接的方式來訪問api子域下提供的任何服務。

在我看來,我有三個解決方案:

  1. 實現直接支持MVC站點下/服務URI服務,避開消費我自己的公共API。
  2. 在我的會員店(我知道用戶名/密碼)中創建一個超級用戶,該站點用來訪問api子域中的服務。
  3. 更改我的身份驗證策略。

在我看來,我可能不應該利用我自己的公共API,並會更好地使用我自己的私人服務(這是可以的,因爲邏輯全部通過門面層共享)。

這裏推薦的策略是什麼?我還假設,如果我要使用選項2或3,則必須使用JSONP來完成。它是否正確?

任何意見將不勝感激。如果需要更多詳細信息,請發帖,我將更新答案。

謝謝!

+0

TL;博士,但我猜你需要從'嗒嗒/ api'託管的API,並從'api.blah'重寫URL到他們。這應該允許你通過javascript來傳遞任何跨域問題。 – 2012-03-14 03:08:31

+0

API應該使用與網站其餘部分相同的身份驗證策略。授權令牌被寫爲cookie,並且應該通過AJAX發送(假設它們被寫爲支持子域或將您的API作爲虛擬目錄託管)。 – Brian 2012-03-14 03:14:40

回答

0

爲了簡化和因爲我決定這是不是我最感興趣的消費我自己的公共API,我實現了在現有的MVC網站一個新的控制器上JsonResult動作。這使我可以利用現有的表單身份驗證並避免跨域的Ajax請求。

0

,如果im以下這個正確的,你只需要確保你的窗體身份驗證cookie將無子域書面所以這將是:.example.com的,如果你使用的是單獨的服務器,你分享他們整個機器的關鍵。

由於窗體身份驗證令牌是無狀態的,並沒有什麼保存在服務器端,這應該能正常運行。

相關問題