2013-12-20 22 views
14

我已經閱讀了很多關於Omniauth和OAuth2以及Omniauth如何使用OAuth的內容,但我並不十分了解每個人的目標是什麼。OAuth2和Omniauth之間的區別

例如,我知道,與Omniauth我可以回去送PARAMS與

@auth [ 'omniauth.params']

,但如果我使用OAuth,沒有Omniauth ,我可以這樣做嗎?

我真正的問題是,我不明白它們之間的區別,Omniauth在哪裏結束並且OAuth啓動,我可以用Omniauth做什麼,這是OAuth無法實現的。

+2

Fran,你寫這個問題的方式讓我覺得你使用的是Rails。真的嗎? – pjmorse

+0

是的,這是一個軌道應用程序。比從來沒有更好的遲發反應:D –

回答

19

在這個答案中,我假設你使用的是Rails(或者其他一些基於Rack的框架),因爲如果沒有這個,Omniauth沒什麼意義。

以OAuth2開頭。 OAuth是一個用於在另一個站點上使用其身份驗證來授權用戶的系統。 OAuth本身描述了管理它的系統,但它沒有指定站點用於執行的代碼。 (這意味着,例如,基於PHP的網站可以使用基於Ruby的網站作爲提供商,而不需要知道提供商幕後發生了什麼。)

這是Omniauth進來的地方。Omniauth是用於支持基於Rack的站點的分散認證的軟件包。 OAuth2是其中一個它支持處理此協議,它包含一個名爲OAuth2的類,它是OAuth2規範的Ruby實現。您可以將Omniauth視爲OAuth2的包裝器,它處理協議的細節,而不會打擾您太多。

可能使用OAuth2 gem /類而不使用Omniauth,並自己處理通過OAuth2進行身份驗證的細節,但我不知道爲什麼。

就Omniauth而言,OAuth無法做到這一點,其中大部分是使用其他非OAuth服務進行身份驗證(Omniauth允許使用社區構建的「策略」進行身份驗證,例如Stack Exchange )。

+3

這是不正確的。 OAuth不是「用於在站點之間共享身份驗證的協議」,也不是「描述兩個站點對用戶進行身份驗證的一系列步驟」。它主要是關於授權,即「資源所有者」允許第三方應用程序代表他們訪問資源。資源可以是提供關於資源所有者是誰的一些信息的帳戶,但是應用程序實際上可能不知道關於它們的任何信息。 –

+1

感謝您的澄清。我做了一些編輯 - 「協議」是一個合理的詞使用? – pjmorse

+0

是的,我肯定會這樣說。 [OAuth2規範](http://tools.ietf.org/html/rfc6749#section-1.2)也使用它。這只是一種認證協議。請注意[OpenID Connect](http://openid.net/connect/)建立在OAuth2上以提供身份驗證和身份相關功能。 –