2010-04-02 56 views
1

我試圖實現與ASP.NET MVC的OpenID(是的,我們還沒有聽說過,我敢肯定!一個前)真的失去了與OpenID和ASP.NET MVC

那真的是不但是,最大的問題在於。我的巨大問題是,我非常困惑如何做到這一點,同時需要存儲大量關於登錄用戶的信息(配置文件,歷史記錄等)

在我看來,OpenID帶走了以網站爲中心的邏輯,並使其開放。如果您只是將身份驗證憑證視爲「已驗證」的用戶,那麼這一切都很好,但非常嚴肅,我完全失敗了。是否可以實現OpenID,使用它登錄將允許用戶在我自己的應用程序上「存在」,就好像他們已經通過正常註冊一樣?

我一直在閱讀實現openId的NerdDinner 2.0應用程序代碼,希望能回答我的問題 - 但可惜我找不到這樣的線索。

回答

1

只需從OpenID獲取數據並自動創建一個新的註冊。或者將具有空白配置文件的用戶重定向到具有配置文件表單的頁面。

+0

好的。那麼最好的方法是通過他們的開放ID登錄這個僞用戶嗎? – Ciel 2010-04-02 13:30:48

+0

這是如何與密碼等工作? – Ciel 2010-04-02 13:33:04

+0

完全取決於您的應用程序以及您如何處理登錄過程。我敢打賭,將openId數據存儲在某個地方,並將用戶擁有的其他所有內容鏈接到此表。您的普通用戶將擁有不同的表格,這些表格將鏈接到相同的數據。這樣,您可以將一個配置文件鏈接到任意數量的登錄提供程序。 – 2010-04-02 13:35:05

0

執行此操作的典型方法是將OpenID與現有用戶帳戶相關聯。我的例子中有一個關聯表,因爲用戶可以有多個OpenID。

所以,如果我有一個帳戶,我登錄https://openid.org/steven然後將其映射到現有的帳戶。

0

這裏要理解的最重要的事情是OpenID提供者不以任何方式控制用戶會話。它只會爲您提供與該用戶關聯的用戶標識符。或者,您也可以請求一些關於用戶的數據。這意味着您不必管理除用戶的OpenID標識符以外的任何用戶數據。在大多數情況下,您希望將該標識符與數據庫中的用戶關聯起來,但這不是絕對必要的。

但是你必須自己管理會話。當您使用OpenID登錄時,並不知道您實際登錄過的線索。它只知道您一直在與提供商進行通信。這意味着應用了AuthorizeAttribute的mvc動作仍然不會被解僱。對於你不得不發出FormsAuthenticationTicket像這樣:

private void IssueFormsAuthenticationTicket(string identifier, bool rememberMe) 
{ 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
     1,       //version 
     identifier,    //name 
     DateTime.Now,    //issue date 
     DateTime.Now.AddDays(14), //expiration date 
     rememberMe,    //is presistant 
     identifier     //user data 
    ); 

    //Now we encrypt the ticket so no one can read it... 
    string encTicket = FormsAuthentication.Encrypt(ticket); 

    //...make a cookie and add it. ASP.NET will now know that our user is logged in. 
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 
} 

這是這個simples版本。然後您可以使用User.Identity.Name訪問標識符數據。

如果您想要將某些用戶數據存儲在您的數據庫中,您可以通過註冊表單執行此操作,該表單遵循OpenID登錄並將標識符鏈接到該帳戶(您也可以選擇支持將多個OpenID標識符鏈接到單個帳戶)。正如我所提到的,您還可以向提供者請求一些數據並將其用於自動註冊。但要小心,因爲即使你說你必須擁有它,所有提供者並不總是提供一切。

Google僅舉例說明了您需要標記的數據。我只是忽略了所有你希望得到的數據請求,但你實際上並不需要。如果用戶將其填入自己的角色,MyOpenID將爲您提供所有需要或要求標記的數據。但是,如果用戶的角色沒有標記爲必需的數據,則登錄甚至會成功。

在我看來,在ASP.NET MVC中做OpenID是最好的DotNetOpenAuth。他們也有MVC的樣本,這是最簡單的,但它的工作原理。該示例雖然不顯示如何請求關於用戶的數據,但您可以在NerdDinner中找到該數據。