我正在建立自己的 CAS。编写了身份验证处理程序,并针对 MySQL 数据库对用户名/密码进行了身份验证。我还添加了注册页面和相关逻辑。
现在我想让用户在他/她注册为用户时自动登录。如何做到这一点?
我正在建立自己的 CAS。编写了身份验证处理程序,并针对 MySQL 数据库对用户名/密码进行了身份验证。我还添加了注册页面和相关逻辑。
现在我想让用户在他/她注册为用户时自动登录。如何做到这一点?
上面的评论不正确 - CAS 客户端无权访问 cookie,只有 CAS 服务器可以访问 - CAS不是共享 cookie 协议。
如果您只有一个站点,您可以在客户端上创建一个会话,使用 Java、Ruby 的标准机制,无论您使用什么平台。
如果要创建 SSO 会话以登录多个应用程序,基本上您需要:
要完成第一个,您可能需要修改 CAS LoginFlow 以允许您通过一次性令牌或类似机制对用户进行身份验证。
这是我的实现。这个想法是从类 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 应该自动清除这个令牌。
希望这很清楚。如果您发现任何错误,请告诉我。