簡體   English   中英

如何使用refresh_token在Oauth 2.0中實現記住我的功能?

[英]How do I implement remember me functionality in Oauth 2.0 with refresh_token?

我已閱讀了很多材料,包括OAuth 2.0的RFC,以使用此協議進行安全登錄。 我實現的流程是授權代碼授權,因為我有一個安全的NET CORE后端來存儲客戶端密鑰。 我已經實現了RFC或其他Oauth 2.0實現工作流程表中描述的協議。

目前我有access_token和refresh_token,但我希望實現記住我的功能。 我以不同的方式思考它,但我不知道如何以安全的方式實現它。

如果我將通過服務器保存瀏覽器的http安全cookie中的刷新,我很容易受到CSRF攻擊,如果我將它保存在本地存儲中則更糟糕,因為我很容易受到XSS攻擊並且可能被盜。

簡單來說,我需要緩解XSS和CSRF漏洞,記住我的功能。 (我也考慮過使用瀏覽器的同站點cookie屬性來緩解CSRF漏洞,但我需要獲得背靠背兼容性,此功能僅在最新版本的瀏覽器中可用)。

我的問題是:我如何實現記住我的功能,同時兼顧安全方面的問題?

如果您的應用程序存在XSS漏洞,那么您是在內存(變量)還是在localStorage中保留令牌並不重要。 惡意代碼訪問它時不會有問題。 因此,我認為在localStorage中保留“記住我”信息不會降低您當前的安全級別。 為了保護您的應用程序免受XSS攻擊,您可以使用內容安全策略之類的內容,以便只執行您信任的JavaScript代碼。 有關詳細信息,請參閱OWASP XSS預防備忘單

我認為您可以在sessionStorage中保留訪問令牌而不是變量,這樣用戶在重新加載頁面時就不必登錄。

如果您將“記住我”信息存儲在僅限HTTP的cookie中,它可能會使您的應用程序容易受到CSRF攻擊,但同樣,有一些方法可以防止它( OWASP CSRF預防 ),例如CORS並在每個中發送額外的令牌請求,需要通過JavaScript代碼從cookie中讀取。

“記住我”功能可能會增加某種風險,因為用戶長時間保持登錄狀態。 因此,您需要評估用戶的風險和便利之間的平衡。

您可以查看基於瀏覽器的應用程序OAuth 2.0 它沒有討論“記住我”的功能,但它討論了良好實踐和安全性考慮因素。

暫無
暫無

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

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