我正在嘗試構建spring-angular2(新的spring)應用程序,並選擇OAuth2作爲安全模型。我的新應用程序有3個部分。身份驗證服務器,後端服務器和前端(角度2)。目前我使用的OAuth2僅用於身份驗證目的有關Spring OAuth2體系結構的建議
根據我目前的設計,我的服務器(業務層)將與身份驗證服務器進行身份驗證(基於授權碼)通信,並且將接收OAuth2令牌(短期訪問令牌和更長壽命的刷新令牌)。我的意圖是使用此刷新令牌在需要時生成訪問令牌直至其到期,之後,重定向到auth服務器進行登錄。所有令牌管理都將在服務器上進行處理,前端對此不知情。
現在,當我運行我的應用程序時,angular2應用程序將首先加載,它將嘗試訪問受保護的URL(如身份驗證檢查)。如果服務器返回401錯誤,angular將強制網頁重定向到auth服務器以進行登錄。後端服務器使用會話來處理安全性(默認oauth2client設置)。這裏的問題是,當會話因空閒而過期(默認30分鐘)時,我無法使用刷新令牌(10天有效期),Spring安全會將網頁重定向到auth服務器進行登錄。
我認爲將會話有效期延長至10天並不是一個好主意。所以我打算避免設計中的會話,在用戶模型(db)中存儲令牌,並向瀏覽器發送一些唯一的ID,這些ID將用於訪問此令牌並使用過濾器創建Authentication對象。 Angular會將此ID存儲在localstorage中併發送每個請求頭。
請讓我知道如果我需要添加任何輸入到這個問題。
我需要您的建議
1)這個架構是否好?你有什麼建議來改善這個嗎?
2)有什麼辦法,我可以處理刷新令牌而不用擔心會話空閒超時? (正如我前面提到的,我是春天世界的新手,所以我可能會在這裏錯過一些小東西)
3)如果我去永久會話,你如何建議我應該與瀏覽器(angular2)溝通唯一的ID?我也想避免Cookie。在這個設置中,url查詢字符串是否只能將此唯一值傳遞給角度應用程序?
我打算在將來使用相同的Auth服務器開發其他應用程序。我使用Auth服務器進行初始身份驗證並訪問令牌更新。 –
短生活刷新令牌意味着,活躍用戶將經常被重定向到登錄屏幕。這種情況我試圖避免。 –
這就是OAuth2的原因,不需要服務器端會話。 OAuth令牌表示Session就像基於cookie的SME一樣。 – dvsakgec