cas 单点登录 记住密码 Remember Me(官网翻译)

官网: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对象的日期结合使用,以确定是否应通知应用程序“记住我”选项。

猜你喜欢

转载自blog.csdn.net/xqhys/article/details/81518118