官网:https://wiki.jasig.org/display/CASUM/Remember+Me
新的CAS文档站点
从CAS版本4.x开始,CAS文档已移至apereo.github.io/cas。维基将不再维护。有关最新版本的文档,请参阅上述链接。
从CAS 3.2.1开始,CAS支持长期票证授予票证,这一功能称为“记住我”。
以下是为CAS 3.4.2启用此功能所需的步骤
组态
deployerConfigContext.xml里
需要将AuthenticationMetaDataPopulator添加到AuthenticationManager。如果未配置AuthenticationMetaDataPopulators,则应将以下属性添加到deployerConfigContext.xml中配置的AuthenticationManager:
<property name="authenticationMetaDataPopulators">
<list>
<bean class="org.jasig.cas.authentication.principal.RememberMeAuthenticationMetaDataPopulator"></bean>
</list>
</property>
登录-webflow.xml
找到“凭证”var,它应该如下所示:
<var name =“credentials”class =“org.jasig.cas.authentication.principal.UsernamePasswordCredentials”/>
把它改成这个:
<var name =“credentials”class =“org.jasig.cas.authentication.principal.RememberMeUsernamePasswordCredentials”/>
还要找到bean“viewLoginForm”,它应该看起来像这样:
<view-state id="viewLoginForm" view="casLoginView" model="credentials">
<binder>
<binding property="username" />
<binding property="password" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credentials'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="realSubmit">
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
</transition>
</view-state>
将其更改为类似于此的内容:
<view-state id="viewLoginForm" view="casLoginView" model="credentials">
<binder>
<binding property="username" />
<binding property="password" />
<binding property="rememberMe" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credentials'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="realSubmit">
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
</transition>
</view-state>
ticketExpirationPolicies.xml
名为“grantingTicketExpirationPolicy”的故障单过期策略需要更改为RememberMeDelegatingExpirationPolicy。
你会得到类似的东西:
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.RememberMeDelegatingExpirationPolicy">
<property name="sessionExpirationPolicy">
<bean class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy">
<constructor-arg index="0" value="7200000"></constructor-arg>
</bean>
</property>
<property name="rememberMeExpirationPolicy">
<bean class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy">
<constructor-arg index="0" value="7200000"></constructor-arg>
</bean>
</property>
</bean>
注意:如果您使用不同的票证注册表来配置Bean配置中的票证生命周期(例如Memcache / Repcache),您还需要调整Bean配置中的票证生命周期!
(可选)applicationContext.xml
CentralAuthenticationServiceImpl现在支持提供单独的TicketRegistries,一个用于ServiceTickets,另一个用于TicketGrantingTickets。如果您愿意,可以为TicketGrantingTickets(即BerkeleyDb)定义长期票证商店,并为服务票证定义内存中的短期缓存。
根据您在计算机上的预期用户数和/或内存数量,您可能需要也可能不需要两个注册表。
注意:定义长期票证商店时要小心。某些长期商店可能无法正确序列化/反序列化TicketGrantingTickets,因此同一票证的多个实例可能同时存在于内存中(这主要是关于ProxyGrantingTickets及其父TicketGrantingTicket的问题)。
(可选)ticketGrantingTicketCookieGenerator.xml
允许您指定“rememberMeMaxAge”属性(默认为3个月)以及cookie的其他属性。
请注意,此时间以秒为单位,与上面的ticketExpirationPolicies.xml中的值不同(请参阅cas-server-core / src / main / java / org / jasig / cas / web / support /中源代码中的“class CookieRetrievingCookieGenerator”中的更多内容) CookieRetrievingCookieGenerator.java)
因此,要将TGT上的rememberMeMaxAge设置为与“记住我”策略相同,请将以下属性添加到“ticketGrantingTicketCookieGenerator”bean:
p:rememberMeMaxAge =“xxxxxxx”,其中xxxx in是秒,例如。604800 7天。
自定义实现
在大多数情况下,内置的Remember Me支持不需要自定义。我们提供了一个默认的凭据类(RememberMeUsernamePasswordCredentials)来处理用户名/密码并记住我的请求。
需要其他字段的用户可能需要实现自己的Credentials类。要获得Remember Me支持,开发人员应实现RememberMeCredentials接口,该接口提供setRememberMe和isRememberMe方法。
用户可能需要在登录页面中添加一个字段。需要将以下内容添加到casLoginView.jsp中
<input type =“checkbox”name =“rememberMe”id =“rememberMe”value =“true”/> <label for =“rememberMe”> Remember me </ label>
安全意义
用户安全影响
与任何长期的“记住我”服务一样,教育用户不要在公共计算机(或与他人共享的计算机)上选择选项非常重要。
服务器安全含义
CAS在其Cookie中使用不透明票证标识符。选择不透明标识符的长度,使得在给定其有效的时间量的情况下计算/猜测它的概率是不可能的。随着票证有效期的长度增加,不透明标识符的长度也必须增加。
通知正在使用的“记住我”功能的应用程序。
使用“记住我”时,会在Authentication对象中添加一个属性。此属性为RememberMeCredentials#AUTHENTICATION_ATTRIBUTE_REMEMBER_ME,其值为Boolean.TRUE。您可以将此选项与创建Authentication对象的日期结合使用,以确定是否应通知应用程序“记住我”选项。