2017-09-18 209 views
0

我正在創建Angular單頁應用程序,並且我想使用JWT(JSON Web令牌)和OAUTH 2.0。我正在閱讀最佳做法,並發現OAuth 0文章應該幫助它https://auth0.com/docs/api-auth/which-oauth-flow-to-useSPA和刷新令牌

我的應用程序應該能夠登錄用戶並保持登錄60天。我知道在瀏覽器中存儲訪問令牌60天並不是非常安全,建議讓它短暫存在。所以我在考慮使用Refresh Token並將其存儲在HttpOnly Secure Cookie中,以便不允許從客戶端Javascript讀取它,但是在這篇auth0文章中,他們說這是非常不安全的,SPA不應該使用Refresh令牌,但它們沒有描述辦法?如果我的auth API代碼交換端點在JSON響應中返回access_token,但在HttpOnly Cookie中返回refresh_token,會怎麼樣?這樣我就不需要公開任何系統密鑰,因爲它們存儲在auth後端API中。

有人可以提供更多的信息,並告訴它是安全的存儲刷新令牌在HttpOnly安全Cookie?

回答

2

SPA應用程序使用OAuth2隱式流程,並且此流程沒有刷新令牌,因爲公共客戶端應用程序無法安全地存儲系統密碼。我建議實施OpenID Connect隱式流程並將JWT令牌存儲在本地存儲中。此令牌更安全,不能被任何其他應用程序使用。您還可以加密令牌以保護敏感信息。如果您正在尋找更多的信息,請訪問一個簡短的鏈接文章https://www.linkedin.com/pulse/microservices-security-openid-connect-manish-singh

+0

但是,如果我的代碼交換端點在JSON響應中返回訪問令牌但在HttpOnly Cookie中刷新令牌會怎麼樣?我不需要公開任何系統密碼,因爲它存儲在我的後端auth API中。 –

+0

看起來您正在使用API​​網關或類似的API來設置安全Cookie響應中的刷新令牌。從http安全角度來看,僅將cookie存儲在http cookie中是安全的。但是我認爲如果你在使用RT的JSON響應中獲得AT並且沒有使用任何其他安全性,那麼你的實現很容易受到CSRF攻擊。 – ManishSingh

+0

我已閱讀您提供的關於OpenID的文章,並且我正在使用一些代理API將所有私鑰存儲在後端,謝謝:) –

1

除了使用OpenID Connect的答案表單@ManishSingh,您應該使用PKCE而不需要客戶機密。