2012-11-30 89 views
2

我開始編寫使用Deezer Api的Winforms應用程序。如何在桌面應用程序中使用Deezer API的oAuth認證?

現在,我堅持自己的OAuth認證過程。

的Deezer的OAuth認證過程接受兩個型動物流動,以獲取用戶身份驗證和授權:在服務器端流和客戶端流。

  • 服務器端的流量使用Web應用程序
  • 客戶端流量使用瀏覽器的客戶端應用程序的JavaScript和移動應用。

我認爲(也許錯誤地)我可以使用客戶端流程,以獲得一個WinForms應用程序通過認證用戶:

然後我寫了啓動的Deezer登錄網頁的web瀏覽器控件的窗體,認爲我可以在獲取訪問令牌後解析Response。通常,如果我將response_type=token參數添加到登錄頁面URL,該頁面將允許使用該頁面。

不幸的是,還有一個redirect_uri參數也必須提供。但是,我不打算使用網站,因爲它不適用於我的情況。

顯然,沒有辦法欺騙這一點,登錄頁面顯示錯誤消息,說明缺少,並拒絕啓動驗證過程。

之前要問的Deezer有關如何使用他們的API對一個WinForm應用程序,我想知道是否有人已經碰到了這一點,以及他如何設法解決它。

因爲我是新來的OAuth,我想知道如果我錯過了一些點,或者API的Deezer並不適用於我的情況。

+0

我不知道答案,但你可以閱讀這個線程http://stackoverflow.com/questions/3744336/oauth-for-desktop-apps – fabricio

+0

非常感謝你的指針。不幸的是,我沒有設法使它工作。我認爲它來自於在服務器端實現Deezer OAuth的方式:它絕對需要redirect_uri。 – Larry

回答

1

我試圖得到一個解決方法您的問題。這是我有:

  1. 使用Web瀏覽器,瀏覽到OAuth的連接URI,
  2. 使用域/子網域控制作爲重定向URI。我們不需要真正的網絡服務。例如http://deezerauth.maneu.net
  3. 添加事件處理程序的Navigating事件WebBrowser控件。

在此事件處理程序,執行類似下面的代碼。

if(e.Uri.AbsoluteUri.Contains("http://deezerauth.maneu.net")) 
{ 
    e.Cancel = true; 
    MessageBox.Show("Welcome on Deezer."); 
} 

聲明:我爲Deezer移動團隊工作,而不是在API團隊工作。我已將這個問題轉發給他們,看看他們是否有更好的解決方案。

+0

非常感謝:)我設法讓我的應用程序使用你給的技巧進行驗證。另外,我可以從URL獲取訪問令牌。順便說一句,我很喜歡這個移動應用程序。 – Larry

+0

不客氣;)。我從API開發團隊獲得了我的答案。這_workaroud_是從現在開始的方式。你應該重定向到一個現有的URI(我們在服務器端做一個HTTP重定向)。此外,您可以重定向到某個地方託管的靜態HTML頁面,以便爲用戶提供流暢的體驗。 – Christopher

1

我終於找到了破解的REDIRECT_URI:

「http://blank.org」 工作!在這種情況下,我將「blank.org」作爲我的應用程序的域名在適當的Deezer MyApp屏幕中顯示。

https://connect.deezer.com/fr/oauth/auth.php? 
     app_id=******&redirect_uri=http://blank.org&perms=basic_access 
     &response_type=token 

然後訪問令牌出現在url中,我只需要從WebBrowser控件中獲取它!

我會將此作爲臨時解決方案,然後才能找到更優雅的東西。

編輯:忘記http://blank.org

這似乎是一個非常糟糕的主意,把我們沒有自己的虛擬域名的站點。如果該網站確實存在,那麼包含我們access_token的重定向網址將被其網絡服務器記錄下來,這非常糟糕。最好是給定義一個不存在的虛擬域名,然後把http://放在redirect_uri參數的前面。我將被拋出一個「未找到的網站」,但至少我會得到我的access_token。

+0

如果您使用的是虛擬網站,最好使用保留的網域,如example.org,example.net和example.com。請參閱http://tools.ietf.org/html/rfc2606 –

相關問題