2012-01-12 55 views
-1

我所試圖做的事:通用的OAuth庫C#

Generic Library in C#處理OAuth的流程的每一個服務(就像Twitter的,LinkedIn和Foursquare)。最難的部分是,我想要simulate all the user input in code,這樣就不需要用戶操作來點擊像「好吧,我會允許它」的按鈕,甚至不用寫用戶名/密碼。

懷疑我到目前爲止有:

1 - 什麼在Twitter的API的authenticity_token的使用情況如何?

2 - 所有服務使用什麼因素,以便我可以實現OAuth Flow的通用用法。例如,我發現第一步很容易使通用方法執行。我所要做的就是更改webRequest的URL,並且BAM擁有請求令牌。

3 - 如何獲取每個服務的驗證器?例如,在LinkedIn Service中,我能夠解析一個頁面來獲取此值,但我找不到這個用於twitter API的verifier。即使在瀏覽器中授權我的應用程序時,我在流程中的任何HTML或任何生成JavaScript的JavaScript中都看不到Verifier

觀察:

1 - 我知道有OAuth的圖書館很多在那裏,像thisthat的,但沒有圖書館,讓我做什麼,我想,那就是在不提示用戶輸入的情況下對用戶進行身份驗證和授權。

2 - 我無法通過任何方式要求用戶輸入。所有用於身份驗證的用戶名和密碼等值都將進行硬編碼,並且每個用戶都將對此請求使用相同的帳戶。

3 - 我也知道,在這裏還有其他的帖子,我寫了幾乎相同的疑問,我要重新發布的原因是爲了讓它更清晰和更新鮮。

4 - 對不起,有任何英語錯誤或對概念的誤解提前。

Basic代碼示例:

這一點,例如,我使用的方法(即avaible國外廣泛的網絡)用於獲取請求令牌的任何服務。我所要做的就是將REQUEST_TOKEN的值更改爲用於服務的特定網址,因此我可以獲得LinkedIn,Twitter或Foursquare的令牌。但我無法在其他步驟中應用相同的流程。

public string AuthorizationLinkGet() 
    { 
     string ret = null; 

     string response = oAuthWebRequest(Method.GET, REQUEST_TOKEN, String.Empty); 
     if (response.Length > 0) 
     { 
      //response contains token and token secret. We only need the token. 
      NameValueCollection qs = HttpUtility.ParseQueryString(response); 

      if (qs["oauth_callback_confirmed"] != null) 
      { 
       if (qs["oauth_callback_confirmed"] != "true") 
       { 
        throw new Exception("OAuth callback not confirmed."); 
       } 
      } 

      if (qs["oauth_token"] != null) 
      { 
       ret = AUTHORIZE + "?oauth_token=" + qs["oauth_token"]; 
      } 
     } 
     return ret; 
    } 

回答

2

不要

OAuth被設計爲要求用戶按下該按鈕一次。如果您將其自動化,您的應用程序密鑰將被撤銷,您的程序將不再有效。

您需要做的是在本地保存授權令牌並重新使用。用戶點擊「我允許」,然後重新使用授權令牌進行未來連接。您需要檢查以確保它沒有過期,並且如果它是您重新授權並且他們再次點擊「我允許」。

沒有正確使用OAuth的網站會允許您繞過網站授權,有些會允許您通過查詢傳遞用戶名和密碼並獲得令牌,但是如果他們擁有網絡授權,您必須手動做到這一點。

如果你是OAuth提供者和消費者,你需要做一些Dropbox爲其v0的API做的事情(我找不到任何指向他們的舊API的鏈接,如果有人可以找到它編輯這篇文章)用戶名和密碼添加到不使用網頁而返回了自動化令牌的特殊地址。或者您需要使用與OAuth不同的身份驗證方案。

+0

你確定嗎? 那麼,無論如何,我不需要mannualy呢?因爲,我剛剛在linkedin上個月完成了與用戶(用戶名,密碼)連接而不提示任何用戶輸入。 「這是否使我成爲黑客?」只是在開玩笑,所以你說我不能爲每項服務做到這一點? – 2012-01-12 17:32:04

+0

我不是提供者,我將成爲消費者,使用服務的API。 – 2012-01-12 17:35:38

+1

OAuth SDK itseld不允許你這麼做,因爲你不會這樣做,用戶應該批准它。理論上你只需要做一次。 – 2012-01-12 19:07:03