2012-06-14 26 views
2

完成使用DotNetOpenAuth的WCF SOAP web服務後,它發生在我發現一旦consumeuthoken存儲在OAuthConsumer表中,它永遠不會被刪除,即使在令牌被視爲過期後也不會被刪除。從數據庫中刪除過期的OAuth令牌

我編輯了DotNetOpenAuth項目的標準AuthorizedConsumers.aspx頁面,以便用戶可以手動撤銷對應用程序的訪問,基本上從數據庫中刪除consumertoken,但我想知道是否應該刪除舊的標記自動。例如,當用戶嘗試訪問令牌授予訪問的應用程序時,不應該進行某種檢查以查看是否還沒有令牌,如果有,是否已過期,請移除舊的令牌如果它已過期,然後再做一個新的?

我實際上並不知道是否有任何檢查已經到位(我找過它們但找不到它們),是嗎?我將如何去添加代碼以從數據庫中刪除過期的令牌?我會在哪裏插入該代碼?在DataBaseTokenManager類的StoreNewRequestToken方法中?

謝謝!

+0

啊,剛剛意識到沒有,舊的代幣不應該被刪除,只要有新的代幣。但是,我們希望保持數據庫中的行數不會太高。所以,我們想要刪除舊的令牌。有沒有辦法在代碼中做到這一點,或者這應該通過在MySQL數據庫中的某種事件來完成? – Nico

+0

我想知道同樣的事情。你在哪裏發現不刪除舊的令牌?我假設過期的令牌應該被刪除。至少對我有意義。 –

回答

0

清理數據庫表超出了DotNetOpenAuth的範圍。無論你喜歡,你都可以實現它。例如,您可能有一個數據庫存儲過程,用於刪除已過期的令牌行,並以某種方式在計時器上調用它。 DotNetOpenAuth希望您僅從實施令牌管理器界面返回有效(未過期)令牌。當DNOA首先要求您存儲這些令牌時,會給您這些令牌到期。

至於避免您的令牌表變得太大,有幾種方法。您可以使用短暫的令牌,並確保定期清理您的表格。但DotNetOpenAuth的OAuth 2實現中使用了最佳方法,因此如果您可以切換到OAuth 2,那麼這非常理想。一旦你在那裏,你會發現根本沒有令牌表。最接近的是一個授權表,每個用戶批准手勢只有一行,您可以在這些授權過期(如果)時將其刪除。通過該授權,客戶可以根據自己的需要獲取儘可能多的獨特令牌,並且數據庫永遠不會增長,因爲令牌是自我描述和簽名的。 DNOA爲您管理這一切。