2010-03-27 161 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以允许您通过一次性令牌或类似机制来验证用户身份。