簡體   English   中英

Spring Security 3.2令牌認證

[英]Spring Security 3.2 Token Authentication

我知道這已經被問到了,但是我無法讓它發揮作用。 以下是我想要完成的事情:

我使用Spring Security 3.2來保護類似REST的服務。 沒有服務器端會話。 我沒有使用基本身份驗證,因為這意味着我需要將用戶密碼存儲在客戶端的cookie中。 否則,用戶需要在每次刷新/更改頁面時登錄。 存儲令牌是我猜的較小的邪惡。

  1. Web客戶端(瀏覽器,移動應用程序)調用類似REST的URL以使用用戶名和密碼登錄“/ login”
  2. 服務器對用戶進行身份驗證,並將令牌發送回客戶端
  3. 客戶端存儲令牌並將其添加到每個api調用的http請求頭中
  4. 服務器檢查令牌的有效性並相應地發送響應

我甚至沒有看過令牌生成部分。 我知道它是倒退的,但我想首先實現令牌驗證部分。

我試圖通過使用自定義文件管理器(AbstractAuthenticationProcessingFilter的實現)來實現這一點,但我似乎對它有錯誤的想法。

像這樣定義:

public TokenAuthenticationFilter() {
    super("/");
}

只會觸發此精確網址的過濾器。 我堅持一些示例實現,它調用AbstractAuthenticationProcessingFilter#requiresAuthentication,它不接受通配符。 我當然可以改變這種行為,但這讓我覺得我走錯了路。

我也開始實現自定義AuthenticationProvider。 也許這是正確的事情? 有人能給我一個正確的方向嗎?

我認為預驗證過濾器更適合您的場景。 覆蓋AbstractPreAuthenticatedProcessingFilter的getPrincipal和getCredentials方法。 如果標頭中沒有令牌,則從getPrincipal返回null。

流:

  • 用戶首次登錄,沒有傳遞頭,因此在securityContext中沒有設置身份驗證對象,正常的身份驗證過程如下,即ExceptionTranslation過濾器根據表單登錄過濾器或您的自定義authenticationEntryPoint將用戶重新編號為/ login頁面
  • 身份驗證成功后,用戶請求安全URL,pre-auth過濾器從securityContext中設置的頭認證對象獲取令牌,如果用戶有權訪問,則允許他訪問安全URL

暫無
暫無

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

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