2014-03-05 46 views
1

我正在開發平臺,當開發者註冊他們的應用程序以使用我們的平臺時,需要生成應用程序ID,從FB,dropbox等網站開始,常見步驟是開發人員指定應用程序顯示名稱,某些權限配置爲新的應用程序,然後它將生成唯一的應用程序ID和應用程序的祕密。開發者網站如Facebook,Dropbox或Twitter如何生成App ID?

我的問題是他們如何實現它,如算法,機制,最佳實踐等?任何幫助和細節將不勝感激!

回答

1

應用程序ID通常是大數字或一串隨機生成的字母數字字符。例如,Twitter使用22個字母數字字符序列。應用程序ID不是祕密,因爲您經常需要將它們放入客戶端代碼中以進行API調用。您可以使用您選擇的語言生成一個。請參閱Python中的這一行,例如:

import random, string 
app_id = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(20)) # 20 being the size of the App ID you're wanting 

另一方面,密鑰是唯一標識符或非常長的字符串,無法猜測。他們不公開,永遠不應該,永遠,向公衆開放(例如JavaScript代碼)。這並不意味着你應該使用複雜的算法來生成它們。 UUID(或GUID取決於你喜歡怎麼稱呼它)在這裏是完全可以接受的,但爲了增加安全性,你可能想要將它們安全地存儲在你的數據庫中(例如加密),以防被壞人甩掉。同樣,在Python中,一切都歸結到這兩條線:

import uuid 
secret_key = uuid.uuid1() 

密鑰在您的服務器和開發人員的代碼之間的私下對話中,讓你的開發人員都知道他的祕密,你應該把它們作爲一個證明鍵和他的應用程序ID。例如,Twitter要求所有API請求都使用開發人員密鑰的組合進行簽名,再加上臨時性的挑戰。在開發者代碼中計算出的HMAC-SHA1簽名充當了他知道他的密鑰和Twitter API發送的先前祕密質詢的證據。

所以複雜的部分不產生應用程序ID或密鑰:它是編寫安全的代碼,以確保你有正確的開發商:) 交談,得到一些啓示,看看(你似乎已經開始這樣做)在Facebook,Twitter,LinkedIn或Google+等知名API上看到「大牌」如何處理這類問題。

+0

另一點:您可能想看看由Facebook和許多其他服務實施的OAuth2協議。 OAuth2的要點是交換{應用ID,密鑰}作爲訪問令牌。一旦開發者獲得了該訪問令牌,他就會將其用於所有後續調用以證明其身份。如果您懷疑某個訪問令牌已被泄露,則訪問令牌可能會過期,並且開發人員將不得不使用其App ID和密鑰重新啓動驗證過程。在服務器端實施OAuth(它被稱爲OAuth提供商)不是微不足道的,雖然... – Romain

+0

真的很有幫助,非常感謝Romain! – user3383016

+0

很高興幫助! – Romain

相關問題