簡體   English   中英

如何在 Django 中安全地存儲 OAuth2 訪問和刷新令牌

[英]How to securely store OAuth2 access and refresh tokens in Django

I'm trying to implement the Azure AD OAuth authentication for our Django app and I would be doing that with Azure AD as an OAuth provider. 所以現在我想知道我們如何安全地將 OAuth 訪問/刷新令牌存儲在我們從 Azure AD 或任何 OAuth 提供程序接收的數據庫中。

我想將用戶的訪問令牌存儲在數據庫中,因為我們的 web 應用程序中有一個功能,用戶可以使用他們的 email ID 發送 email 並且我們有一個基於用戶每隔半小時運行一次的定期作業特定的主題行。 我們將在 Microsoft Graph API 的幫助下完成這項工作,為了調用 Microsoft Graph API,web 應用程序應該存儲用戶的訪問令牌。 但我擔心的是,一旦我們收到訪問和刷新令牌,一旦我們將其存儲在數據庫中,任何人都不應訪問它。 那么我們可以如何安全或以加密方式將 OAuth2 訪問令牌存儲在 Django 中。

我瀏覽了幾篇關於這個問題的文章、QnA 和論壇,但也想聽聽 Django 社區的意見。

提前致謝。

讓我們從通過圖發送 email 開始( https://graph.microsoft.com/v1.0/users/{userId}/sendMail )。 我做了一些測試,這里是細節。

  1. 當我使用憑證流生成訪問令牌時,我無法使用它發送 email 並出現類似“ErrorAccessDenied”的錯誤,這意味着我們無法生成可用於多個帳戶的令牌。

  2. 當我使用身份驗證代碼流生成訪問令牌時,當我使用用於在 api Z572D4E421E5E6B9BC121Z85CE. 在這種情況下,我也會遇到與上述相同的錯誤。

  3. 當我使用 ropc flow 並且我可以使用它成功發送 email 時,這意味着只有當我使用正確的用戶 id 和 token 時我才會成功發送 email

發送 email 失敗時的錯誤消息:

{
    "error":{
    "code": "ErrorAccessDenied",
         "message": "Access is denied. Check credentials and try again."
    }
}

根據測試結果,我認為如果您決定將令牌存儲到數據庫中,您可以將其與用戶 ID 內聯保存,這樣當您執行周期性作業時,您的程序可以查詢可以首先解碼的正確令牌檢查是否過期,並使用它發送 email。

如果我在某些地方誤解了,請指出我的錯誤,謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM