`

单点登录 sso

    博客分类:
  • Java
sso 
阅读更多
目的:使用单点登录系统统一管理各子系统的用户登录登出,并提供一个统一的集成页面,方便用户在各系统之间的快速切换。
环境:cas-server-3.3.1,cas-client-2.0.11

一:配置服务器端的数字证书

    1,生成数字证书

         ./keytool -genkey -alias examplecas -keypass changeit -keyalg RSA -keystore server.keystore
    
    2,导出数字证书

         ./keytool -export -alias examplecas -keypass changeit -file server.crt -keystore server.keystore

    3,将数字证书导入jre的可信区

          ./keytool -import -alias examplecas -file server.crt -keypass changeit -keystore ../jre/lib/security/cacerts
  
    其他的一些命令:
    查看可信证书列表(检查证书是否加入成功)
    ./keytool -list -keystore ../jre/lib/security/cacerts

    常用命令:


-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-dname 指定证书拥有者信息例如: "CN=firstName,OU=org,O=bj,L=bj,ST=gd,C=cn"
-list 显示密钥库中的证书信息 keytool -list -v -keystore 别名 -storepass ....
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias 别名 -file 文件名.crt
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias 别名 -keystore sage
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 别名 -keypass .... -new .... -storepass ... -keystore 别名
-import 将已签名数字证书导入密钥库 keytool -import -alias 别名 -keystore 证书名-file 文件名(可以加.crt 后缀)



    注意:
    1,生成数字证书的时候必须使用主机名或者域名作为证书名称(CN),
         例如sso.example.com(CN=sso.example.com, OU=example, O=example, L=beijing, ST=beijing, C=china)
    2,检查JAVA_HOME环境变量(echo $JAVA_HOME),确认tomcat使用了那一个jre(有时候一台机器上会有

         多个jre),需要将生成的证书文件导入至web服务器使用的那个jre的信任证书列表中,可以使用keytool -list

         命令检查证书是否导入成功。

二:配置服务器端tomcat 6.0(server.xml)
    打开被注释掉的https配置区,添加keystoreFile,keystorePass,truststoreFile属性配置。
Xml代码  收藏代码

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
            maxThreads="150" scheme="https" secure="true"  
            clientAuth="false" sslProtocol="TLS"  
                    keystoreFile="/usr/java/default/bin/server.keystore"  
                    keystorePass="changeit"  
                    truststoreFile="/usr/java/default/jre/lib/security/cacerts"  
        />  





    如果需要则为cas server配置虚拟主机
Xml代码  收藏代码

    <Host name="sso.example.com"  appBase="webapps"  
            unpackWARs="true" autoDeploy="true"  
            xmlValidation="false" xmlNamespaceAware="false">  
        </Host>  



   将cas-server-3.3.1-release\cas-server-3.3.1\modules\cas-server-webapp-3.3.1.war解压并

   放至 webapps/cas3目录后,可通过https://sso.example.com:8443/cas3/login 访问cas server登录页面。


三:配置一个最简单的cas server端。
    1,新建数据表
Sql代码  收藏代码

       create table users  
    (  
       id                   int not null auto_increment,  
       username             varchar(50) not null,  
       password             varchar(50) not null,  
       primary key (id)  
    );  





    user表中添加需要认证的用户数据。
    2,在 WebRoot/WEB-INF/spring-configuration/文件夹下新建一个spring的配置文件,配置dataSource对象
    3,修改WebRoot/WEB-INF/deployerConfigContext.xml配置文件,将:
Xml代码  收藏代码

    <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  




       替换为:
Xml代码  收藏代码

    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
        <property name="sql" value="select password from users where username=?" />  
                <property name="dataSource" ref="dataSource" />  
    </bean>  






四:配置客户端服务器。
    客户端的服务器同样需要导入服务器端生成的数字证书,否则在cas server回调客户端页面的时候将会抛出以下异常:
Java代码  收藏代码

    javax.servlet.ServletException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  
        edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:254)  
        edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)  




    提示找不到有效的证书路径。
    配置步骤:
    1,拷贝服务器端生成的server.crt文件至客户端jre/bin目录下
    2,执行:
        C:\Program Files\Java\jre1.6.0_06\bin>keytool -import -alias examplecas -file server.crt -keypass changeit -keystore ..\lib\security\cacerts
    3,查看是否添加成功
        C:\Program Files\Java\jre1.6.0_06\bin>keytool -list -keystore ..\lib\security\cacerts

五:修改客户端增加单点登录支持。
    1,修改web.xml文件:
Xml代码  收藏代码
    <filter>  
        <filter-name>CAS Filter</filter-name>  
                <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>  
                <init-param>  
                        <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>  
                        <param-value>https://sso.example.com:8443/cas3/login</param-value>  
                </init-param>  
                <init-param>  
                        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>  
                        <param-value>https://sso.example.com:8443/cas3/serviceValidate</param-value>  
                </init-param>  
                <init-param>  
                        <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>  
                        <param-value>sso.example.com</param-value>  
                </init-param>  
        </filter>  
      
        <filter-mapping>  
                <filter-name>CAS Filter</filter-name>  
                <url-pattern>/portal/portal.jsp</url-pattern>  
        </filter-mapping>   




 
    2,增加子系统的登录接口,支持集成页面(portal.jsp)的访问请求。
       例如,老系统的登录页面和主页面分别是login.jsp,main.jsp(login.jsp负责验证用户是否合法,合法则将用户
       数据存入该系统的session对象当中,main.jsp负责分配用户在该系统内的访问权限及页面的初始化),为了不影
       响老系统的正常访问,尽可能保证独立性可以实现两个仅供portal.jsp调用的类似页面(cas-login.jsp,cas-main.jsp).
       cas-login.jsp中可以获得cas server传递给我们的用户名称。
Java代码  收藏代码

    String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER); 



       根据获得的用户名称再去本地数据库查找用户信息,完成验证及角色权限初始化的工作。

六:总结一下:
    1,单点登录仅仅帮助我们在各个子系统中间安全的共享了一下用户名,省去了用户重复登陆的麻烦,统一了用户

         帐户的管理,至于用户在每个系统中的权限分配,还是继续交给子系统完成吧。可以开发一个cas server端的

         集成界面(portal),方便用户在各个子系统中间的快速切换。
    2,为了完善cas server的用户管理功能,需要在cas 的server,client端各自开放几个调用接口,保证子系统与

         cas server端的账户信息同步。
    3,改造老系统时尽量为portal的集成开发新的访问入口(而不是去修改以前的代码使之兼容),这样既可以从集

        成portal访问,又可以从原有的访问地址访问。

    4,配置server端及client的服务器时候一定要找对tomcat究竟在使用那一个jre,windows上查看

         %JAVA_HOME%变量,linux上echo $JAVA_HOME.
    5,server端及client端的服务器均需要导入数字证书,否则cas server端回调客户端页面时将会抛出:
       
 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

       异常。
分享到:
评论

相关推荐

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    单点登录sso

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。这种技术极大地提升了用户体验,减少了用户记忆和管理多套用户名和密码的负担,...

    单点登录SSO的实现原理

    单点登录SSO的实现原理 单点登录(SSO)是一种常见的技术实现原理,在多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。实现单点登录说到底就是要...

    单点登录 SSO 实例

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次认证即可访问多个相互关联的系统。在SSO系统中,客户端和服务端是两个关键组成部分。 客户端通常是指用户交互的...

    帝国cms oauth2.0 单点登录sso

    【标题】:“帝国cms oauth2.0 单点登录sso” 在IT行业中,单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户通过一次登录即可访问多个相互关联的应用系统,无需为每个系统分别进行认证。这里的...

    sso单点登录ppt.ppt

    sso单点登录ppt.ppt

    跨服务器登录验证(单点登录SSO)的过程和Java实现

    跨服务器登录验证(单点登录SSO)的过程和Java实现 跨服务器登录验证(单点登录SSO)是指用户只需要登录一次便可以访问多个相关的应用系统的机制。这种机制可以提高用户体验和系统安全性。下面我们将介绍跨服务器...

    单点登录SSO截HttpModel方法

    Asp.net 单点登录SSO截HttpModel方法;决对实用好用的源码。 网上有很多sso,多数都是共享cookie,而这个是用在同一个iis下,截取httpmodel,修改User.Identity,记录它为用户信息可以到处用。 当然你也可修改扩展。。...

    超全 Lotus Domino Xpages 开发资料——单点登录SSO的实现方式

    超全 Lotus Domino Xpages 开发资料——单点登录SSO的实现方式 大全通过分类提供给大家,请大家根据需要下载全开源, 并且一看就懂,不保留 https://blog.csdn.net/weijia3624/article/details/107013401

    EPBWECC配置单点登录SSO.doc

    文档"EPBWECC配置单点登录SSO.doc"详细阐述了如何在EP(Enterprise Portal)系统中配置与BW(Business Warehouse)和ECC(Enterprise Central Component)系统的单点登录(SSO, Single Sign-On)集成。以下是配置步骤的详细...

    跨服务器登录验证(单点登录SSO)的过程和Java实现.docx

    【跨服务器登录验证(单点登录SSO)】 单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一个系统中登录后,无需再次认证即可访问其他相互信任的系统。SSO简化了用户对多个系统的访问流程,提高...

    跨服务器登录验证(单点登录SSO)的过程和Java实现.doc

    【跨服务器登录验证(单点登录SSO)】 单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一个系统中登录后,无需再次认证即可访问其他相互信任的系统。SSO简化了用户对多个系统的访问流程,提高...

    跨服务器登录验证(单点登录SSO)过程和Java实现

    单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入认证信息。这种机制极大地提高了用户体验,减少了用户记忆多套账号密码的困扰,...

    java单点登录sso源码

    Java单点登录(Single Sign-On,SSO)是一种网络访问控制机制,允许用户在一次登录后,无需再次认证即可访问多个应用系统。SSO的核心思想是:用户只需要在一个可信的身份认证中心(Identity Provider,IdP)进行身份...

    单点登录SSO的参考资料

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户在一个系统上登录后,无需再次输入凭证即可访问多个相互关联的系统。SSO的主要目标是提高用户体验,减少用户记忆多个密码的负担,同时也能提高...

    discuz x2.5和cas集成,实现cas单点登录 sso

    X2.5与CAS(Central Authentication Service)集成是一种常见的身份验证解决方案,它能够实现单点登录(Single Sign-On, SSO)功能。在SSO系统中,用户只需登录一次,就可以在多个相互独立的应用系统之间自由切换,...

Global site tag (gtag.js) - Google Analytics