我正在實現一個使用Spring Security + Spring會話的登錄過程來爲需要創建/維護會話的後端服務的REST構建登錄功能。Spring安全會話ID作爲令牌配置
我不知道我是否正確地接近解決方案,因爲我正在使用自定義端點手動創建會話。也許會話創建需要在授權方法本身完成?或者也許有一種方法可以在後端的一些請求驗證之後讓spring創建會話?我正在使用自定義過濾器和提供程序。
我目前的配置另外,我有一個問題,因爲後端API與每個請求創建一個新的會話,即使它應該返回401
該解決方案的要求如下:
- 客戶端將登錄到第三方認證/授權提供商。驗證通過後,提供者將發出訪問令牌。
- API必須驗證客戶端的訪問令牌與第三方提供商。驗證後,API必須創建一個會話並向客戶端返回一個新的令牌(或會話ID)。
- 未來對API的調用應該在標頭/ cookie中包含令牌(或sessionID),以便API獲取客戶端的會話。
最大的問題在這裏:是否有遵循使用鏈接到用戶會話令牌基於身份驗證的常用方法?如果是這樣,如果我在春季會話創建會話之前需要進行自定義驗證,並且向此會話添加自定義屬性?
我的代碼位於:https://github.com/munilvc/api-session/tree/master/src/main/java/com/munilvc/poc/security
例如,一些執行示例:
1)執行自定義登錄:
$ curl -X POST http://localhost:8080/app-api/login/createsession -v
> POST /app-api/login/createsession HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200
< x-auth-token: 15a06ce8-5b34-401a-a05f-a0d933926245
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 29 Aug 2017 01:28:24 GMT
<
171{"username":"username1"}
2)調用另一個端點提供X-auth-令牌:
注意x-auth令牌在響應中被刷新。 (指創建一個新的會話 - 這是我們希望避免,這也發生在響應401)
$ curl -X GET http://localhost:8080/app-api/accounts/2 -H "x-auth-token:15a06ce8-5b34-401a-a05f-a0d933926245" -v
> GET /app-api/accounts/2 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.49.1
> Accept: */*
> x-auth-token:15a06ce8-5b34-401a-a05f-a0d933926245
>
< HTTP/1.1 200
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< x-auth-token: 42a5db80-e5e1-4127-bd85-e468af4a8fb2
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 29 Aug 2017 01:29:08 GMT
<
870{"id":3,"name":"Account 3"}
PS:我不知道如果我允許提供一個鏈接到堆棧中的代碼溢出。如果沒有,我也可以在這裏粘貼代碼。
非常感謝!