2012-12-15 105 views
9

構建一個也需要API的網站,因此(可能)支持OAuth登錄我不確定如何處理他的用戶和身份驗證部分。通過Asp.Net,RavenDB和OAuth支持進行身份驗證

所以我有一個ASP.NET MC4應用程序與RavenDB。

什麼是最好的方法?

  • 要爲RavenDB使用其中一個Membership提供程序,並分別在API部分處理Oauth?例如,格里芬的解決方案here

  • 或者製作一種自定義解決方案,重新實現membership-crap並支持OAuth。

我不太確定從哪裏開始,對於如何做到這一點的任何建議表示讚賞。

回答

10

enter image description here

** ** Clicky-click for da GitHub project

IMO,忘記存儲用戶名和密碼。這是瘋狂的談話!讓用戶使用他們的Facebook,Google或Twitter憑據登錄。這是普通網站的80%。

認證和存儲憑證是IMO的兩項不同任務。例如,我不在乎你在哪裏進行身份驗證..一旦你做..我不在乎你如何存儲這些數據:)

個人而言,我會將它存儲在RavenDb ..但那是我的個人選擇。

同樣 - >保持這兩項任務SEPARATE是(IMO)的關鍵。

enter image description here

所以lets look at some codez ....

public ActionResult AuthenticateCallback(string providerKey) 
{ 
    // SNIP SNIP SNIP SNIP 

    var model = new AuthenticateCallbackViewModel(); 
    try 
    { 
     // SNIP SNIP SNIP SNIP 

     // Complete the authentication process by retrieving the UserInformation from the provider. 
     model.AuthenticatedClient = _authenticationService.CheckCallback(providerKey, Request.Params, state.ToString()); 


     // Create a new user account or update an existing account. 
     // Whatever you end up doing, this is the part u want to 
     // pass this data to your repository (eg. RavenDb, Sql Server, etc) 
     // I'll use RavenDb in this example... 
     // And yes .. this is a contrite example. U might want to check for 
     // existing email or id or whatever u need to do, etc. 
     var myUser = Mapper.Map(model.AuthenticatedClient); 
     session.Store(myUser); 
     session.SaveChanges(); 

     // SNIP SNIP SNIP SNIP 
    } 
    catch (Exception exception) 
    { 
     model.Exception = exception; 
    } 

    return View(model); 
} 

所以讓我們看看我做了什麼。我已經刪除了任何冗長的東西(值檢查等),這只是在這個答案中的噪音。

首先,我處理Authenticate回調。例如。我剛剛去過Facebook,它說'是的!你是你',它會回到我的網站,有一些數據是我要求它給我的。

接下來...我們從Facebook獲得一些數據..但這可能不是我們想要放入的格式,在RavenDb中。所以我把它從舊格式轉換成新的閃耀User類,這是你將堅持在你的Db。

第三 - 我將這個存儲在Db中。 這就是你要做任何定製數據庫邏輯的地方

就是這樣。

M O對düL A R IŽ(E T)H AŤ中文I T

The.End。

現在請原諒..在啓示錄之前還有幾個小時。我必須準備自己。

+0

我完成了這個。我的需要是識別用戶,而不是進行身份驗證 - 他們可以做到這一點。所以這個工作。現在,我已將用戶存儲在我的數據庫中,我需要將它與ASP.NET成員資格系統一起使用。所以我可以用[Authorize]和[AllowAnonymous]標記動作,返回ASP.NET等內置功能。我怎麼做?有了這個:http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr

+2

@esbenr要使用'[Authorize]'等屬性..你**不要**(和我重複,**不要**)需要使用ASP.NET Membership系統。 **請不要在任何情況下都使用**(Google爲100萬個原因)。爲了利用'[Authorize]'等等,你只需要在'IPrincipal'和'IIdentity'中存儲使用信息(是的,2x I)。只需創建一個新的'GenericPrincipal',然後添加一個新的'GenericIdentity'。谷歌爲那些更多的代碼:) –

+0

謝謝,這就是我最終做的。我只使用Auth門票+ cookie來獲取靜態USER主體 - 它的工作原理就像是一種魅力:-)這種方法在internet-thingie上陳述了很多地方。順便說一句:我創建了一個自定義的原型實現和一個自定義的IIdentity實現。因此我想在我的用戶環境中使用更多的屬性。感謝您的回覆。/esbenr – esbenr

0

好吧。會員提供者臃腫。如果你不打算使用它們中的功能,但只是OAuth,我不會使用它們。 MVC4中提供的SimpleMembership和Oath提供者不幸的就是更大的混亂。

那麼你的選擇是:

  1. 使用SimpleMembership
  2. 在OAuth的支持
  3. 使用自定義的成員提供
  4. 使用定製的OAuth提供

如果內置計劃堅持#3我會推薦使用我的(在Griffin.MvcContrib中)。建立會員供應商並不是微不足道的。

至於OAuth的你有這樣一個解決方案:https://github.com/rafek/SimpleSocialAuth

相關問題