2012-12-19 31 views
4

有沒有人有關於如何做到這一點的線索?我基本上試圖用OpenID替換「與Google連接」的策略。當用戶使用新的OAuth方案登錄時,需要確定一箇舊用戶(Google開放ID用戶)。設計:將Google Open ID遷移到Google OAuth

我有一個依賴電子郵件地址作爲主鍵的工作實現,因爲開放式ID策略可以捕捉到這一點。問題是,我不想在OAuth流程中詢問電子郵件。理想的價值僅僅是Google用戶ID,但Open ID策略似乎沒有捕捉到這一點。

因此,我已經打開ID標記,如https://www.google.com/accounts/o8/id?id=AfSCwGQ4PUaidXSQddJugXKLqU5V0MrXFhJM6UHybPw,並試圖瞭解我是否可以從中獲取Google ID。

更新:我在這裏解釋我是如何結束這樣的遷移 - http://softwareas.com/migrating-user-accounts-from-google-openid-to-google-oauth-to-google-plus

+1

也許[此鏈接](http://andrewhorsman.net/ruby-oauth-google-calendar-data/)和Will Norris的答案會幫助你。如果你確實能夠實現它的功能,如果你以後可以在這裏發佈你的解決方案,那將是非常棒的。我真的很感激它。 – Ashitaka

回答

3

谷歌使用directed identifiers了對OpenID是每個依賴方獨特,被明確設計爲隱藏用戶的任何可相關性標識。所以簡短的回答是,沒有辦法獲得與給定Google OpenID相對應的Google ID。

但是,一種選擇可能是使用Google的OpenID+OAuth Hybrid流。這使您可以將OAuth令牌作爲普通OpenID流的一部分,然後可以使用它從OAuth2 Login API獲取用戶ID,然後您可以將其與其現有帳戶相關聯。爲所有現有用戶完成此操作後,請切換爲直接使用OAuth2登錄。

當然,這種方法的訣竅是讓所有用戶再次登錄,以便您可以通過新流程發送它們。這將歸結爲您願意等待遷移賬戶多久,以及您是否願意通過電子郵件向他們發送並要求他們再次登錄(類似於強制密碼重置)來激勵現有用戶。

+0

感謝您的詳細解答。這裏面臨的挑戰是我想爲每個人(新的和現有的)展示一個Connect with Google,因此OpenID + OAuth流程不會成爲我想要新用戶瀏覽的內容。幸運的是,到目前爲止,還沒有很多用戶通過Google Open ID進行連接,因此我可能只需爲它們製作一個自定義遷移流程並將其鏈接發送給它們。 – mahemoff

4

今天我們沒有準備好避免用戶看到另一個批准頁面的策略。

但是,我並不是試圖做一個基於OAuth1的混合流,而是必須將所有遺留代碼添加到您的服務器,我建議您只關聯電子郵件地址並轉到OAuth2登錄。我假設你就像大多數網站最終要求提供電子郵件地址一樣,因爲他們通常希望用於帳戶恢復。只要確保您從OpenId獲取電子郵件地址作爲簽名參數之一。

然後使用userinfo.email範圍和OAuth2 https://developers.google.com/accounts/docs/OAuth2Login,您應該能夠以較少的開發人員痛苦進行遷移。

此外,我們正在添加對OpenIDConnect的支持,並且它支持login_hint參數,因此您需要將[email protected]添加到您的授權URL中,並且會將批准引導至正確的帳戶。這現在沒有記錄,但它可能對你有用。用戶的瀏覽器可以通過多個帳戶登錄到Google,並且您想嘗試找到合適的帳戶。始終檢查您從OAuth2流程中獲得的電子郵件,確保它匹配,因爲這只是一個「提示」。

用戶仍然需要重新授權OAuth2,但我們計劃在未來跳過此重新授權。重點是計劃使用OAuth2,我們希望儘快實現無縫遷移,並且您將使用受支持的協議。

+0

謝謝大衛。我可以通過詢問電子郵件來完成這項工作,但我試圖避免要求。 – mahemoff

+0

但這很危險,因爲它允許用戶在過去的用戶的電子郵件地址下生成一個Google帳戶,然後登錄。 – Doug