2013-04-02 83 views
13

我創建了一個客戶端,需要做如下操作的應用:我應該如何爲應用程序實現OAuth?

  • 允許用戶使用谷歌,Facebook,Twitter和LinkedIn進行身份驗證。
  • 允許用戶在註冊後添加其他提供商。 (即,如果用戶通過Google認證,那麼他們應該能夠添加任何或所有其他提供商)。
  • 允許用戶導入Google通訊錄,Facebook好友列表,Twitter關注者和Linkedin好友,以便構建自定義聯繫人列表。

哪裏是最好的地方開始學習這個?有沒有一個標準,每個人都使用這些東西在.NET中?我一直在谷歌搜索幾個小時,雖然看起來大多數人指向DotNetOpenAuth我似乎無法找到關於如何使用該庫的任何可靠的教程。下載附帶示例,但仍然讓我感到困惑。

我認爲這將是簡單的:

  • 配置提供商的祕密。
  • 開始登錄與供應商,身份驗證cookie的
  • 驗證用戶在我的數據庫中創建用戶記錄,並從供應商存儲唯一的ID。

但似乎每個提供者都有它自己的一組代碼,它們都非常不同並且令人困惑。 Facebook有一些圖形對象,Twitter有一些我不明白的「InMemoryTokenManager」,Google甚至沒有認證例子,只有Google Address Book的例子。除此之外,由於某種原因,你必須將示例代碼中的一些ApplicationBlock演示代碼複製到自己的應用程序中,並且在不知道它試圖做什麼的情況下編譯所有代碼是一項艱鉅的任務。

我覺得我錯過了所有這些基本的東西。

即使是書籍推薦,在這一點上也會很棒。

我相信我理解OAuth的高級概念,但是一旦我嘗試深入探究本質,我立即就會迷失方向。

+0

看到這個vedieo:http://www.slideshare.net/leahculver/implementing-oauth –

+0

不幸的是,你想實現每個社交網絡API的程度的變化會有所不同。然而,他們中的大多數人使用帶有令牌的O'Auth來實際連接。 – Greg

+2

我只是希望DotNetOpenAuth有一些簡單的教程。每個要求提供這種文檔的SO問題都不可避免地被告知「下載樣本,這就是您所需要的」。對於像我這樣顯然愚蠢的人來說,這些樣本並不是「你所需要的」。 – Chev

回答

6

首先,如果您使用的是net 4.5,那麼默認的asp.net模板帶有大多數這些提供程序的身份驗證代碼時,使用外部庫確實沒有意義。

其次,如果你還需要對OAuth2驗證程序的一些細節的很好的教程,看看這個偉大的職位福斯特http://ben.onfabrik.com/posts/oauth-providers

第三,遺憾的是,如果你需要什麼比authentiation別的,也沒有單一協議。因此,每個提供者都有自己的方式來暴露這些額外的數據 - 聯繫人,帖子等。你不能做太多的事情,它與oauth2無關,但只是一種調用特定api的方式,而這偶爾是偶然的基於oauth2身份驗證顯示爲rest/xml Web服務。這意味着如果只進行身份驗證,則每個提供者的協議大多相同。更多的是具體的。

第四,我會堅持由提供商返回的電子郵件地址而不是內部ID。並非所有提供商都支持該ID,而所有提供商都可以返回用戶電子郵件而且您可以信任這些信息,因爲提供商在通過oauth2返回之前驗證電子郵件。

+0

Twitter似乎沒有回覆電子郵件,似乎也沒有選擇甚至詢問用戶。 – Chev

+0

@AlexFord:謝謝你的評論。我總是對google/facebook/live進行oauth2操作,而且來自twitter的電子郵件的缺乏對我來說是新鮮事物。考慮我的最後一句話無效,但其他人持有。 –

2

我建議你使用PureKrome的World Domination,它使用簡單,記錄完好,非常好!

https://github.com/PureKrome/WorldDomination.Web.Authentication

它處理的Twitter,谷歌,Facebook等人用簡單的一條線配置,並且它處理一切。

創建者也圍繞n jabbr.net進行了很多掛起。

+1

哈哈哈我喜歡這個自述文件。這會幫助我做更多的事情嗎?我需要抓住用戶的朋友/聯繫人。 – Chev

+0

不,它不會這麼做 - afaik與OAuth無關,這將用於您希望從中獲取數據的每項服務。 – Moo

+1

順便說一下,花了5分鐘將WD掛鉤到現有的應用程序:)只是將令牌存儲在鏈接到用戶帳戶的表中(我存儲提供程序名稱,令牌,然後從提供程序還原始返回,您永遠不知道何時你可能需要它......)並手動設置asp.net Auth令牌cookie。 – Moo

1

ASP.NET MVC 4'互聯網應用程序'模板有DotNetOpenAuth實現它,你應該看看,如果你還沒有。

+0

是的,我見過。如果沒有與默認的成員資格和角色提供者緊密集成,我似乎無法找到任何示例。這個應用程序不使用它。它執行'FormsAuthentication.SetAuthCookie(userId)',然後使用'User.Identity.Name'來稍後訪問'userId'。之後,這是所有自定義數據模型。 – Chev

+0

然後你可能需要看看你自己實現的'SimpleMembershipProvider'。 –

+0

儘可能多的。我一直在試圖避免這種情況,但如果沒有其他辦法的話。內置功能是可擴展的嗎?我可以將LinkedIn添加到組合中嗎? – Chev

0

看看Social Bootstrap API項目(它使用了servicestack,但很高興看到所有這些流行語技術在可讀的示例中一起工作)。

此外,如果您想更好地處理OAuth的工作方式,請參閱Mashape has good explanation。這會讓你看看大多數封裝器實現的幕後內容。

Rick Strahl has an example我多年前用MVC實現OpenID。這有點過時,但它是當時最直接的實現之一。我用該實現構建的幾個客戶站點仍然運行良好。

相關問題