Sso(单点登录);
CAS(Central Authentication Service,即中央认证服务)
Sso是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
统一的认证系统;ticket(统一的认证标志);
跨系统的实现;跨服务器的实现;
Cas:
包含:cas server;cas client;
单点登录:Jasig cas使用,(Yale cas 就是Jasig cas;)
主参考文档,
http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html
解决方案1:---更简单,标准;| 网站和学籍系统集成采用此方案(因为为同一公司开发);
建立统一认证系统,所有用户都在其中进行管理和操作;
···
//一个用户登录两个系统;
解决方案2:
1,分离的多个系统;如:学籍系统;网站系统;区县系统;
2,建立统一认证系统;提取每个系统的需交互账户;创建到统一认证系统中;| 定时自动更新,也可手动更新各系统的用户数据;
3,操作自系统时,不与统一认证系统和它系统发生关系关系;
4,点击关联系统超链,进入时:统一认证系统进行验证;| 更改用户信息时,跳回自系统进行操作;
···
//多少系统多少其下用户;
ssl证书:
收费的,VeriSign ---正式商业项目使用;
免费的,CAcert;StartSSL; ---小的项目,可以使用;
自制的, ---学习时,可使用;
···
http://b.gkp.cc/2010/10/01/build-ssl-nginx-vhost-with-startssl/ ,StartSSL
Sina微博登录组件:
Csdn的登录界面:
使用第三方登录;
设计一种云级别身份认证结构,
http://www.infoq.com/cn/articles/architecting-cloud-scale-identity
···
单对多模式;一个用户使用不同凭证登录不同系统;| 给sina一个凭证,sina用户就可以登录本系统了;| 然后基于传递过来的用户信息,创建一个本系统用户,保存相应凭证;下次就可以再次直接使用了;
///
下载cas:
http://www.jasig.org/cas 服务端,客户端;
1用JDK自带的keytool工具生成证书:
1),创建证书,
新建d盘keys文件夹,cmd以管理员身份运行,输入下面命令:
keytool -genkey -alias aurora -keyalg RSA -keystore d:/keys/aurora
sso.wsria.com
输入密匙库口令:admin123
2),导出证书,
keytool -export -file d:/keys/aurora.crt -alias aurora -keystore d:/keys/aurora
3),为客户端的JVM导入证书
Cmd,以管理员身份运行;
cd C:\Program Files\Java\jdk1.7.0_02\jre\lib\security
keytool -import -keystore “cacerts” -file D:/keys/aurora.crt -alias aurora
或,删除原证书后,下面输入,(上面个就可以,所以不使用这种)
keytool -import -keystore cacerts -file D:/keys/aurora.crt -alias aurora
4),应用证书到Web服务器-Tomcat
打开tomcat目录的conf/server.xml文件,<Connector port="8443" 块去掉注释,并设置keystoreFile、keystorePass,( C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf )
keystoreFile="D:/keys/aurora" keystorePass="admin123"
keystoreFile:在第一步创建的key存放位置
keystorePass:创建证书时的密码
5),定义域名
修改,C:\Windows\System32\drivers\etc中的hosts文件,
添加内容如下:
127.0.0.1 sso.wsria.com
问题:c盘Hosts文件怎么修改;
拖动hosts文件到桌面,改完再拖回去,就好了;
6),浏览;
重启tomcat,
浏览器输入,https://sso.wsria.com:8443/
错误:
https://sso.wsria.com:8443/ 打不开;
修改<Connector port="8443" 块中的protocol=为"org.apache.coyote.http11.Http11Protocol"
···
显示,该网站的安全证书不受信任!---正确;
------------------------------------
2部署cas:
cas-server-3.5.2\modules\cas-server-webapp-3.5.2.war,tomcat下解压;
修改文件夹名为cas;
浏览器浏览,http://localhost:8080/cas
输入admin/admin点击登录(CAS默认的验证规则只要用户名和密码相同就通过),转入登录成功页面;
上面证书成功,则可以输入https://sso.wsria.com:8443/cas ,结果和上面的http://localhost:8080/cas同;
---------------------------------------------
3身份验证读取数据库的数据:
tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml,
注释掉,---默认的不连接数据库的验证方法;
<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
其后添加,---通过数据库,验证用户名密码方法
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource"></property>
<property name="sql" value="select pwd from admin where name=?"></property>
</bean>
在结尾的</beans>前添加,---数据连接配置
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql:///website</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>chen</value></property>
</bean>
复制cas-server-3.4.3.1\modules\cas-server-support-jdbc-3.4.3.1.jar和mysql驱动jar包到tomcat/webapp/cas/WEB-INF/lib目录
重启tomcat,
http://localhost:8080/cas/login 输入用户名密码,数据库验证成功后,登录;
单点登录退出:
https://sso.wsria.com:8443/cas/logout
美化CAS服务器界面:
修改tomcat/webapp/cas\WEB-INF\view\jsp\default\ui下的jsp页面;
例:登录界面:casLoginView.jsp
登录成功:casGenericSuccess.jsp
登出界面:casLogoutView.jsp
-----------------------------------------------
4,配置客户端:
用户登录请求---项目web.xml---重定向到认证系统---返回用户信息到项目---给出结果页面;
参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
加入jar:
cas-client-core-3.2.1.jar commons-logging-1.1.jar
Web.xml中添加内容:
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.wsria.com:8443/cas/login</param-value>
<!--这里的server是服务端的IP-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面的步骤1,2,3为前置;
浏览器,浏览;
https://sso.wsria.com:8443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2Fcas1%2F
转入认证登录页面,操作同3;
5,从cas获取用户登录信息;
参考咖啡兔代码;
6,多个项目:
后置;
/
统一认证,初步实现;| 先就这样,加深使用时再说;
另:咖啡兔的代码,可以下下来,学习下;