2012-10-01 64 views
8

構建以下身份驗證解決方案的最佳方式是什麼?跨平臺ServiceStack身份驗證

我有一個獨立的(不具有MVC集成)ServiceStack REST服務層。這項服務是我所有數據的切入點。沒有數據存儲在客戶端上。

我有多個客戶端(ASP.Net MVC 4個網站,MonoTouch的應用程序,應用程序MonoDroid的,Silverlight應用程序,應用程序的MonoMac等)。

我想在服務級別提供身份驗證(Facebook,Twitter等),包括將用戶存儲在MongoDBAuthRepository中,但允許客戶端提供登錄UI(是否需要此功能?)。例如,對於MVC網站,我想將遠程ServiceStack認證服務(包括Facebook,Twitter)與MVC的認證系統集成在一起。看起來實際的認證應該發生在服務端,但客戶端需要保持認證響應。

我讀過維基,看着SocialBootstrap,並宣讀了論壇,但我仍然困惑,這是應該如何在分佈式的工作方式。

回答

5

是OAuth選項像Twitter + Facebook的身份驗證應在瀏覽器中發生,因爲他們每個人都需要從他們的尊重AUTH提供商重定向從每個用戶獲取可信驗證。一些移動應用通過嵌入用於Twitter + FB認證的瀏覽器小部件來實現這一點。

一旦用戶在同一個已認證的會話中使用Twitter + Facebook和憑證進行身份驗證,ServiceStack's AuthProviders會自動將所有身份驗證信息合併到同一個帳戶中。因此,稍後您將能夠使用1個身份驗證提供程序登錄,但可以訪問所有3上可用的信息。SocialBootstrapApi項目提供了一個示例。

+1

我缺少的部分是,如果我做的瀏覽器中的FB/Twitter的權威性(因此,在客戶端(MVC /移動/等))的一面,我怎麼傳遞權威性的ServiceStack遠程服務? –

+1

ServiceClient只需要指定'ss-pid' cookie,它可以通過使用BasicAuth/DigestAuth隱式分配或直接調用'/ auth/*'服務來顯式分配。否則,你可以物理地將cookie添加到ServiceClient,它只是一個base62編碼的AuthSessionId guid – mythz

+4

好吧,我一直試圖讓這個工作,但我認爲我*仍然*失去了一些東西。用戶通過電話登錄twitter/facebook,然後嘗試註冊我的ServiceStack服務或訪問需要身份驗證的服務。什麼Auth服務提供商?要傳遞什麼參數?什麼密碼設置? http://imageshack.us/a/img84/5415/servicestackoauthfromcl.png http://imageshack.us/a/img607/5415/servicestackoauthfromcl.png –