2010-03-27 146 views
0

我正在建立自己的CAS。編寫了一個認證處理程序,用戶名/密碼通過MySQL數據庫進行認證。我還添加了註冊頁面和相關邏輯。在CAS註冊後自動登錄

現在我想讓用戶在他/她註冊爲用戶時自動登錄。如何實現這一目標?

+0

CAS認證使用cookie在已成功認證的系統上存儲故障單。 CAS客戶端查找此cookie以確定系統是否應該退回到CAS服務器,因爲無論出於何種原因,票證都是無效的;否則系統將被允許訪問。註冊我意味着註冊 - 創建帳戶,而不是帳戶驗證... – 2010-03-27 17:05:58

+0

我明白你在說什麼,但仍不知道如何解決我的問題。 – 2010-03-28 02:18:06

回答

0

這是我的實現。這個想法是從org.jasig.cas.web.flow.AuthenticationViaFormAction類中借用的。

在我的網絡控制器處理通常來自新用戶的註冊電子郵件的解鎖請求。

 String oneTimeAuthToken = this.userManager.generateOneTimeAuthToken(userEmail); 
     UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(); 
     credentials.setUsername(userEmail); 
     credentials.setPassword(oneTimeAuthToken); 
     String tgt = centralAuthenticationService.createTicketGrantingTicket(credentials); 
     ticketGrantingTicketCookieGenerator.addCookie(request, response, tgt); 
     log.debug("Current user was unlocked and logged in."); 

這背後的基本原理是創建一個臨時密碼標記進行身份驗證。當然,一旦驗證成功,userManager應該自動清除該令牌。

希望這是明確的。如果你觀察到任何錯誤,請告訴我。

+0

你能解釋一下userManager對象和一些更多的示例用法嗎? – nash 2011-09-02 06:30:03

1

上述評論是不正確 - CAS客戶做訪問cookie的,唯一的CAS服務器那樣 - CAS是一個共享cookie的協議。

如果您只有一個站點,您可以在客戶端上創建一個會話,使用Java,Ruby的標準機制,無論您使用的是哪種平臺。

如果你想創建一個登錄多個應用程序的SSO會話,基本上你需要:

  1. 創建一個SSO會話(通過CAS服務器)
  2. 重定向到CAS服務器
  3. 讓用戶重定向到您的應用程序。

要完成第一個,您可能需要修改CAS LoginFlow以允許您通過一次性令牌或類似機制來驗證用戶身份。