2013-11-27 49 views
5

我已經看到關於此的其他問題(here,herehere),但我對任何解決方案都不滿意,所以我再次提出這個問題。我正在開發一個Web應用程序,它將利用來自多個提供商(Google,Facebook,Twitter,Yahoo)的OAuth進行身份驗證。我正在努力尋找適用於本地開發環境和生產環境的配置。在開發和生產環境中使用OAuth

我已經找到了解決方案,領先的是每個供應商中註冊多個應用程序,接受對每個不同的用戶密鑰和密碼:

「我的應用生產」 - 一個回調URI來http://www.myapp.com/callback

「我的應用程序開發」 - 一個回調URI來http://local.myapp.com/callback

添加一個條目到您的本地hosts文件指向local.myapp.com127.0.0.1和s ome配置爲您的應用程序使用基於環境的適當的用戶密鑰,並且您很好去,對嗎?

但我的應用程序是responsive,我需要測試我的PC上運行的開發環境,來自多個其他設備,比如我的iPhone和iPad,兩者都不能解析開發回調URI。

比方說,我的網絡上已經有DNS服務器,並且能夠在那裏添加local.myapp.com的條目,而不是我的本地主機文件,現在可以從網絡上的任何設備訪問我的開發實例。

但我的開發團隊都在同一個本地網絡上運行。現在local.myapp.com指向每個人都有相同的IP。讓我們回到在每個開發人員的計算機上設置hosts文件,以便他們都可以在工作站內獨立工作。現在沒有人可以再次從他們的iPhone測試他們的開發實例。對於每個開發人員來說,向提供者註冊一個應用程序只是爲了他們可以指定一個唯一的回調URI似乎不是正確的答案。

正常情況下,當我用雜草解決了一個看似簡單的問題時,通常意味着我正在做一些根本性錯誤的事情。我是否缺少有關OAuth的內容,難道不打算這樣使用嗎?我很想完全放棄OAuth,只需要使用OpenID(不需要註冊應用程序,並且可以在應用程序中指定回調URI),但是隨後我在Facebook和Twitter上失去了兩位大牌手。我真的不需要用戶的任何數據,只要它可用就很好。有人能讓我回到OAuth嗎?

+0

Is只是爲了測試正確嗎?爲什麼不將每個Web應用程序都視爲虛擬目錄? – codemonkeh

+0

我並不真正遵循你所得到的。你能詳細說明嗎? – schmimd04

+0

你有沒有找到解決方案?我正在爲完全相同的事情而苦苦掙扎。 oauth提供程序不允許在原始中使用通配符,所以我不能擁有'alice.dev.myapp.com'和'bob.dev.myapp.com',但是如果所有開發人員共享'dev.myapp.com',我不會不知道如何將平板電腦和手機指向正確的開發人員。爲每個開發人員創建一個oauth入口點似乎是唯一的方法。 – mczepiel

回答

0

我發表了以下的答案大約一個Rails應用程序我寫道:

OAuth2 in development and production

這是一個寶石叫阿菲每ENV CONFIGS對谷歌的OAuth2它做到了。

+0

這看起來像是一個管理屬性文件的奇特工具。當OAuth回調轉到local.myapp.com時,如何在我的iPhone上測試我的PC上運行的應用程序? – schmimd04

0

我不能說FB或Twitter,但在Google的Oauth實現中,您可以註冊幾個oauth回調URL。因此,您只需在應用程序中使用一些邏輯來感知它處於測試模式,然後使用適當的回調URL啓動Oauth流程。有一些缺點,例如現場測試刷新令牌和測試刷新令牌之間的衝突,但它們是可管理的。

在我的應用程序中,我有一個管理所有這些的單例。當我的應用程序需要啓動Oauth流程時,它會通過請求URL和任何其他顯着數據(例如調試標誌)調用單例,並且單例返回正確的回調URL,客戶端ID等。

+0

當然,我可以處理邏輯知道它是生產還是開發,並使用正確的消費者密鑰/祕密。但是如何測試從我的iPhone與dev回調uri我的iPhone無法解決?我需要從開發中的移動設備進行測試。 – schmimd04

+0

所以這是一個DNS問題?使用類似AWS Route 55的東西,並在那裏註冊您的開發服務器,以便公開解決。 iPhone可以配置爲使用代理服務器嗎?如果是這樣,也許你也可以用一些代理路由規則來解決你的問題。如果它有幫助,我會愉快地將開發服務器設置爲我管理的其中一個域的子域。 – pinoyyid

0

我還沒有找到一個減少人工的方法,使開發訪問所有相關設備:

  1. 爲每一個開發人員的機器有固定IP通過本地網絡的DHCP系統基於MAC地址,或(較少推薦)讓他們選擇一個IP和希望爲最好的
  2. (可選*)根據該IP爲每個開發人員的計算機分配本地網絡中的DNS主機名
  3. 使用開發人員計算機的主機名爲每個提供程序的開發人員註冊oauth條目。
  4. 每位開發人員將其應用程序配置爲使用其獨特的oauth dev令牌。

假設所有網絡中的設備依賴相同的DHCP和DNS服務器,那麼你就可以從任何設備訪問alice.dev.myapp.combob.dev.myapp.com在網絡上。

請注意,您需要分別管理每個其他環境的oauth配置,但遵循相同的方法。

有可能的工具來自動註冊開發人員的機器IP和主機名以減輕難題的部分。每個開發人員在每個提供程序上註冊oauth配置是最乏味的一步。

UPDATE

*如果你使用你可以跳過DNS部分xip.io url例如10.0.0.123.xip.io如果您知道Alice是10.0.0.123,但您仍然希望修復該IP,因爲您不想在步驟4中更新oauth令牌的url。