cas, casphp, discuz整合参考资料

1. UCENTER 接口,技术文档
http://dev.discuz.org/wiki/#UCenter

2. PHP 整合 CAS 进行单点登录
http://www.discuz.net/thread-1416206-1-1.html
这里的技术, 尝试了, 但是无效, 但是, 却指出了, 一些关键的地方,

3. CAS 服务器配置
http://andy-ghg.iteye.com/blog/942653

4. 使用 URL 请求的方式来实现登录
http://bbs.phpchina.com/thread-131930-1-1.html

5. 单点登录(sso) yale-cas 学习日记(四) —–多站点配置
phpCas的技术介绍, 并区分forceAuthencation , isAuthcatined.
注意: forceAuthencation 是强制验证, 如果不通过, 则会自动的跳到登录界面, 在论坛中, 因为是通过AJAX请求的logging.php的, 所以, 如果直接在logging.php中添加phpCas, 并使用这句的话, 会导致无法跳转的问题. 而phpCas在运行 client 的时候, 就会从服务器取是否登录, 以及登录信息, 所以, 这里可以直接根据 isAuthcatined 的判断, 然后取得用户信息, 当然, 如果做成进入论坛就要他登录的话, 到是可以直接使用 forceAuthencation 做强制跳转

http://www.icydot.com/blog/p/706.htm

6. cas实现单点登录,登出(java和php客户端)
这里面最后那里有提到怎么实现PHP 和 JAVA 同步登出的问题.
"phpCAS::handleLogoutRequests();  这里会检测服务器端java退出的通知,就能实现php和java间同步登出了。"
http://zxs19861202.iteye.com/blog/855856

7. cas改造随笔
主要是讲一些概念
http://www.cnblogs.com/hellowood/archive/2010/08/05/1793364.html

8. CAS 之自定义登录页实践
邓飞鸽的博客
http://denger.iteye.com/blog/809170

9. CAS学习笔记
这里面满全的.
http://wenku.baidu.com/view/9bc8ddfb770bf78a652954e9.html

10. 使用 CAS 在 Tomcat 中实现单点登录
参考
http://blog.csdn.net/DL88250/article/details/2799522


论坛服务器说明:
论坛根目录: /usr/local/apache2/htdocs/
论坛目录: /usr/local/apache2/htdocs/forum
子目录
附件目录: attachments
ucenter目录: /usr/local/apache2/htdocs/uc
子目录
头像目录: data/avatar/
其它
/usr/local/apache2/htdocs/ucenter这个目录没什么用, 别被误导了.



phpCas 说明

//定义常量, 主要是服务器信息
define('CAS_ENABLE', true);
define('CAS_SERVER_HOSTNAME', "192.168.41.86");
define('CAS_SERVER_PORT', 8080);
define('CAS_SERVER_APP_NAME', "/cas");
//引用CAS的文件
require_once("CAS.php");
//打开debug, 这样, 会在当前目录下生成 phpCAS.log 文件
phpCAS::setDebug(); 
//连接, 读取登录信息
phpCAS::client(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME);
//phpCAS::proxy(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME);

//这条必须
phpCAS::setNoCasServerValidation();

phpCAS::handleLogoutRequests();  //这里会检测服务器端java退出的通知,就能实现php和java间同步登出了。
//强制登录
//phpCAS::forceAuthentication();
//取得是否登录
$auth = phpCAS::checkAuthentication();
//取得用户信息.
$username = phpCAS::getUser(); 


cas 服务器说明
注意,  这些配置虽然我都试过了, 但是还是不能使 cas server 返回想要的东西...
其它配置网上都有, 需要重点关注的是 WEB-INF/deployerConfigContext.xml 这个配置文件.
attributeRepository 属性: 取到登录账户的除username以外的信息. 邓飞鸽之前所设定的值只是默认值, 基本上是没有什么用的. 以下是我调整过的内容.

<bean  class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
        <constructor-arg index="0" ref="dataSource"/>
        <constructor-arg index="1" value="select * from tab_uc_account where {0}"/>
        <property name="queryAttributeMapping">
            <map>
<!-- 查询的参数 -->
                <entry key="username" value="username"/>
            </map>
        </property>
        <property name="resultAttributeMapping">
            <map>
<!-- 需要返回的值, value指数据库字段, key指cas中保存的名字 -->
                <entry key="id" value="id"/>
<entry key="username" value="username"/>
<entry key="salt" value="salt"/>
<entry key="password" value="password"/>
            </map>
        </property>
    </bean>

设置好 attributeRepository 属性后, 需要在 authenticationManager 属性里面做修改.
将 authenticationManager 的 list 下面的UsernamePasswordCredentialsToPrincipalResolver 调整成如下:

<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" >
<property name="attributeRepository" ref="attributeRepository"></property>
</bean>

将 attributeRepository 注入到 UsernamePasswordCredentialsToPrincipalResolver 中去, 这样才会把属性从数据库中读取出来.

但是经过上面两步还是得不到东西, 后来, 在网上看到还需要调整 serviceRegistryDao 属性.
将 serviceRegistryDao 下面 LIST 中的具有 <property name="serviceId" value="http://**" /> 属性的项, 调整成:

<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="0" />
<property name="name" value="HTTP" />
<property name="description" value="Only Allows HTTP Urls" />
<property name="serviceId" value="http://**" />
<!--
-->
<property name="allowedAttributes">
<list>
<value>id</value>
<value>username</value>
<value>salt</value>
<value>password</value>
</list>
</property>
</bean>

这样调整后, 还是不能用...有点悲剧. 还有调 JSP , 上面的网址中有, 我就不说了, 但是还是不行...



关于 HTTPS 的配置
邓飞鸽在做cas server 的搭建的时候, 并没有把这块弄完, 所以, 在某些情况下还是会出现问题....
同样是 WEB-INF/deployerConfigContext.xml 配置文件, authenticationManager -> authenticationHandlers -> HttpBasedServiceCredentialsAuthenticationHandler
在这上面添加一个属性 p:requireSecure="false" , 这个属性是判断是否使用 HTTPS 的.
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:requireSecure="false"
p:httpClient-ref="httpClient" />
当然, 可能还要调整其它地方, 这个我就不是很清楚了...

猜你喜欢

转载自juqkai.iteye.com/blog/1262447
Cas