WebLogic Server的单点登陆功能--转载

在WebLogic 8.1最新的 SP4版本中,最引人注目的要算是在安全方面,提供了用于和Microsoft Windows客户端进行Single Sign-On的Single Pass Negotiate Identity Assertion Provider。通过该Provider可以轻松完成从前认为技术难度很高的和Windows客户端的Single Sign-On。

  这个简单,低成本的SSO解决方案相信对大多数的企业应用来说更具吸引力:

  1. 用户只需要开机时登录Windows域,就可以以登录用户的身份访问全部的基于WebLogic Server,IIS等的应用系统;
  2. 在后续的访问中,用户将不需要重新输入口令,这样使得口令不会以明文形式在内网传递,来自内网的安全威胁被降低了(企业的主要网络安全威胁来自内网),如果在内网启用SSL则成本太高;
  3. 只需要一次验证,因此不论是AD还是其他的存储用户信息的关系数据库,LDAP等,验证的开销降低了;
  4. 极大改善用户体验,提高了IT服务品质,也提高了用户的工作效率

  在成本方面,对比一些SSO产品,简单的说:

  1. 不需要添置新的硬件,不需要购买新的软件License,并且可以充分利用大多数企业中非常成熟的MS AD资源;

    * 而一些SSO产品,不仅需要添加新硬件,购买License,而且成熟的部署往往涉及到Load Balance,Failover等,成本骤然升高

  2. 不需要专门的运营维护人员,不需要专门的技术支持人员对服务器进行管理,现有的IT团队即可胜任,成本被进一步降低;
  3. 安装配置简单,不需要安装独立的软件,操作人员不需要专门的知识背景;
    * 对比一些SSO产品超厚的文档手册,以及一次又一次的培训等

  因此这使得大多数的SSO产品厂商面临了更大的挑战。在应用安全技术突飞猛进,SSO市场竞争激烈的今天,用户将有越来越多的自由去选择适合自己的SSO解决方案,用户将最终获益。所以我们要感谢那些为今天这些技术的发展做出贡献的人们。

  在我拿到WebLogic 8.1 SP4后,完成了WebLogic Web Server和Windows 的Single Sign-On的配置,最终效果比较理想,整个配置过程也比较简单。但是其间也遇到了一些问题,加上Bea在网站上提供配置文档(http://e-docs.bea.com/wls/docs81/secmanage/sso.html)很多地方说得并不清楚,甚至还有一些错误,所以希望通过本文更好的帮助大家完成SSO的配置。

1 准备
WebLogic Single Sign-On的主角是SPNEGO(Simple and Protected GSS-API Negotiation Mechanism)。所谓的Negotiate就是双方通过一定的协商,确定最终使用的认证协议。因此通过SPNEGO,双方可以使用Kerberos,也可以使用NTLM等安全协议来完成双方的认证。所谓的GSS(http://www.ietf.org/rfc/rfc1508.txt )就是Generic Security Service API,SPNEGO可以说是其表现形式,主要目的是提供通用的安全服务,保证应用在不同环境中的可移植性。

  由于SPNEGO和Kerberos的紧密关系,因此我们更多情况下是看到SPNEGO/Kerberos这样的组合。

  WebLogic的SPNEGO Identity Assertor仅支持Kerberos Token。通过下图我们可以明白,SPNEGO Token和Kerberos Token关系,以及SPNEGO Token对底层认证数据的封装:

(from http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/http-sso-2.asp )
IE将Kerberos Token(Service Ticket以及一些认证必须的信息),使用SPNEGO Token封装,然后发送给WebLogic Web Server。Web Server通过SPNEGO Token中定义的协议类型确定使用的是Kerberos,然后从SPNEGO Token中解析中Kerberos Token进而完成后续的验证。

  SPNEGO Token使用二进制的ASN.1编码(LDAP协议中的LDAP Message即使用ASN.1编码),编码后的二进制数据通过Base64编码为可见字符后传送。具体可以参考http://www.faqs.org/rfcs/rfc2478.html。

  下面我们简单了解一下SPNEGO/Kerberos的验证过程:

  1. 用户使用在AD中创建的用户帐号和口令登录Windows 2000 Domain;
  2. 用户向一个Web Server发送请求访问一个受限的资源;
  3. 如果用户未认证,Web Server将返回HTTP Code 401 Unauthorized以及HTTP Header WWW-Authenticate: Negotiate要求客户端提供认证信息;
  4. IE根据配置的SPN(后面将介绍)获得向KDC请求的Service Ticket或者其他一些凭证;
  5. IE使用这些信息封装成Negotiate Token发送给Web Server
  6. Web Server使用事先准备好的keytab验证IE提交的认证信息,或者将Kerberos Token中的信息提交到KDC验证;
  7. WebLogic Web Server验证成功后装配相应的Subject,然后为此用户起一个Session,用户登录成功

  实际的验证过程是比较复杂的,读者可以参考:http://www.microsoft.com/technet/prodtechnol/windows2000serv/maintain/security/kerberos.mspx

2 环境
接下来,我们将以一个具体的环境为例进行说明。我们假设有下面的部署逻辑:

服务器端:
* Windows 2000 Advance Server (Active Directory)
* 域:SSO.COM
* 机器域名:AD-SERVER.SSO.COM
* RedHat Linux 7.2
* 主机名:wls

 * WebLogic Server 8.1 SP4 (一定要是SP4)

客户端机:
* Windows 2000 Professional
* IE 6.0

注意:
* 浏览器IE6.0和5.0以及5.5等在配置上会有不同
* 检查Windows 2000 Advance Server是否已经安装了Setspn.exe,否则从该链接中获取并安装。
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setspn-o.asp
* 保证Windows 2000 Advance Server中存在Ktpass.exe,你可以在C:Program FilesSupport Tools下找到它,否则需要从Windows2000 AD Server安装盘中获取。
* Kerberos实现对大小写敏感,因此配置中我们一律使用大写的域名
* 默认情况下Windows2000 Ad Server跟运行weblogic 的RedHat Linux两个主机间的时间相差不能超过5分钟(Kerberos协议对时间是敏感的),否则验证会失败。根据实际情况我们可以缩短这个时间,获得更好的安全性。

3 配置过程
准备工作都完成后,我们可以开始具体的配置工作了。

  1. 在Windows 2000 Advance Server上的配置
    (注意:以下的操作使用Administrator或者同等权限的用户操作)

    在Windows2000 Advance Server配置了Active Directory,同时将其作为DNS服务器。Windows2000 Ad Server将在每个Domain Controler上面启用KDC(Key Distribution Center),KDC包括两部分,分别是Authentication Service以及Ticket Granting Service。具体我们就不多说了,总之大家明白一旦配置好 Windows Domain Controller(通过AD建了一个Domain)这些就已经存在了并能正常工作,在Windows上除非有特殊要求,否则我们不需要多于的配置,或 者启用KDC之类的操作。

    * 在DNS中为WebLogic Server所在主机配置DNS记录。

    DNS Name:wls.SSO.COM

    *在AD(域SSO.COM)中为WebLogic Server创建用户帐号

    帐号:wls
    注意,在创建用户帐号时,不能选择用户第一次登录时需要修改口令的选项。而且需要使用默认的DES加密类型,这个不要修改,其他类型不被WebLogic支持。

    以及测试用户帐号:TESTUSER

    *使用Setspn.exe为用户wls创建一个Service Principal Name

    该SPN将作为用户(wls)属性存放,IE将根据它来判断访问的是哪一个Service,进而从KDC请求该Service的Ticket。其中HTTP是服务类型,HOST可以代表全部类型,我们这里指定为HTTP。

    并且如果一个主机上,开了多个同样的服务,那么可以通过设置port来区分,具体参考http://www.microsoft.com/resources/documentation/WindowsServ/2003/all/techref/en-us/Default.asp?url=/Resources/Documentation/windowsserv/2003/all/techref/en-us/W2K3TR_adspn_how.asp 由于我这里只有一个WebLogic Server,所以没有指定。

    下面是配置示例:
    C:Program FilesResource Kit>setspn -A HTTP/wls.SSO.COM wls
    Registering ServicePrincipalNames for CN=wls,CN=Users,DC=SSO,DC=com 
    HTTP/wls.SSO.COM
    Updated object

    完成后可以通过命令检查:
    C:Program FilesResource Kit>setspn -L wls
    Registered ServicePrincipalNames for CN=wls,CN=Users,DC=SSO,DC=com:
    HTTP/wls
    HTTP/wls.SSO.COM

    C:Program FilesResource Kit>

    *创建Kerberos Service Principal,并映射到wls用户
    C:Program FilesResource Kit>ktpass -princ http/wls .COM -pass *** -mapus
    er wls -out c: empwls.HTTP.keytab
    Successfully mapped http/wls to wls.
    Key created.
    Output keytab to c: empwls.HTTP.keytab

    Keytab version: 0x502
    keysize 43 http/wls.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 1 etype 0x1 (DES-CBC-CRC) keylength 8 (0xa7c7e6ab9767fb37)
    Account has been set for DES-only encryption.

    WebLogic Web Server就是Kerberos Service,这里通过-princ指定了生成的Service Principal(kerberos 5格式:name/instance),它将代表一个WebLogic Web Server实体。这里是http/wls.COM(域名大写),它非常重要,Sun Krb5LoginModule(JDK1.4中提供)将通过它以及keytab对客户端提交的请求进行验证。它将配置在JAAS LoginModule Config Entry中。-pass参数指定了用户wls的口令,如果你前面选择了用户第一次登录必须修改口令,这里就惨了。

    Account has been set for DES-only encryption.这个信息也比较重要,如果没有DES-only,你的WebLogic认证可能会失败。

    上面的命令成功后将在磁盘上生成一个wls.HTTP.keytab文件,该文件非常重要,必须妥善保管,除了指定用户外,禁止任何其他人访问。

  2. 在RedHat上的配置
    *将文件wls.HTTP.keytab拷贝到Linux指定目录下
    如果是在真实环境中,这个拷贝过程必须非常安全。我建议使用启动WebLogic的Linux用户身份通过sftp将文件拷贝到启动WebLogic的目录下,方便我们后面的配置。

    拷贝完成后,立即删除Windows机器上的原文件。同时修改该文件属性为只有属主用户可读(属主用户为启动WebLogic的Linux用户)。可以使用如下命令修改文件访问属性:

    600 wls.HTTP.keytab
    502br> 
    注意:如果你拥有多个keytab,那么使用ktutil合并这些keytab到一个 keytab文件中。默认安装的RedHat中似乎没有安装krb5-workstation这个RPM包(工具ktutil包含该RPM内),如果这 样,需要下载RPM包进行安装,安装完成后/usr/kerberos/目录下会有我们需要的工具,大家可以通过该链接下载:http://rpmfind.net/linux/RPM/redhat/6.2/i386/krb5-workstation-1.1.1-9.i386.html 
    具体合并过程和文档请参考相关文档,比如:http://e-docs.bea.com/wls/docs81/secmanage/sso.html#1101370

    * 配置JAAS Login Configruation Entry

    JAAS Login Configuration Entry被JAAS使用。WebLogic Negotiate Identity Assertor解析完成Negotiate Token后将通过Krb5LoginModule完成最终的用户验证。

    此验证过程通过我们前面生成的keytab参与来完成,不需要访问KDC机器。这降低了KDC认证方面的开销。

    com.sun.security.jgss.initiate {  com.sun.security.auth.module.Krb5LoginModule required  principal="HTTP/wls.COM" useKeyTab=true keyTab="wls.HTTP.keytab" storeKey=true;
    };
    com.sun.security.jgss.accept {  com.sun.security.auth.module.Krb5LoginModule required  principal="HTTP/wls.COM" useKeyTab=true keyTab="wls.HTTP.keytab" storeKey=true;
    };

    参数中的Principal为前面我们通过ktpass创建的Service Principal,这里是“HTTP/wls.COM”。keytab指向我们通过ktpass生成的keytab文件。

    将上面的内容保存为krb5Login.conf。

  3. WebLogic的配置
    * 为WebLogic 配置Single Pass Negotiate Identity Assertion Provider

    这个配置比较简单,请参考http://e-docs.bea.com/wls/docs81/secmanage/providers.html#1199872 ,这里就不多说了。 注意Supported Types中两个Token Type需要全都选择。

    * 创建一个Web应用

    创建一个sso.war,其中在web.xml中指定将全部的页面作为受限资源控制,用户必须经过身份验证才能够访问web应用页面。
    <security-constraint>
    <display-name>Security Constraint on Conversation</display-name>
    <web-resource-collection>
    <web-resource-name>Conversation web service</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>*</role-name> 
    </auth-constraint>
    </security-constraint>
    <login-config> 
    <auth-method>CLIENT-CERT</auth-method>
    </login-config>

    Auth-method指定验证方式为CLIENT-CERT,这是必须的。Role-name为*表示只要用户拥有至少一个J2EE Security Role即可访问这些资源。用户成功登录后,其登录名就是一个Principal,WebLogic将默认将其映射为一个Security Role。因此只要用户成功登录,即可访问/*资源。所以如果用户没有登录,WLS将要求用户登录。

    在war包中的jsp文件内,比如index.jsp通过如下代码获取当前用户信息:

    <%=request.getRemoteUser()%>

    如果返回不为null,表明用户已经成功登录,其返回值就是登录用户的UID。使用WebLogic Console部署该应用,确保应用部署成功。

    * 在WebLogic控制台上增加一个用户帐号

    该帐号同1步在AD中创建的帐号必须完全一致,这里叫TESTUSER;或者你配置一个Active Directory Authentication Provider指向AD也可,但我没有实际操作,大家有兴趣的可以试一下。

    * 修改启动WebLogic脚本增加如下的系统变量
    -Dsun.security.krb5.debug=true
    -Djava.security.krb5.realm=SSO.COM
    -Djava.security.krb5.kdc= AD-SERVER.SSO.COM
    -Djava.security.auth.login.config=krb5Login.conf -Djavax.security.auth.useSubjectCredsOnly=false-Dweblogic.security.enableNegotiate=true"

    Krb5Login.conf为我们 前面编辑的configuration entry。AD-SERVER.SSO.COM指向我们的AD Server。可以在/etc/hosts文件中增加该名字到IP的映射会比较简单一些。sun.security.krb5.debug将使 Krb5LoginModule输出调试信息。这里还要提醒大家realm等参数(SSO.COM)都需要大写。

    * 重新启动WebLogic

  4. IE浏览器的配置

    IE浏览器也需要适当配置,我们这里以IE6.0为例说明。主要两个地方需要配置:

    1. 工具 Internet选项 -点击“本地Interanet”-点击“站点”-高级
    将*.SSO.COM加入,这样我们访问 wls.sso.com时,IE会将wls.sso.com作为本地网站来访问。

    2. 工具 -Internet选项 -高级 -安全 
    “启用集成Windows身份验证”前面打勾。6.0版本前的IE会默认选择该选项,IE6默认没有选择。

    具体请参考连接http://msdn.microsoft.com/library/en-us/dnsecure/html/http-sso-1.asp 中关于IE的配置。

    完成后重新启动 Windows。

4 验证
找 一个Windows 2000 Professional机器(切记不要是那台AD Server, AD上的IE只会向Web Server发出NTLM Token而非Kerberos Token, NTLM Token不被WLS支持),按照上面的IE配置方法完成配置后,将其加入到SSO.COM域。

使用用户TESTUSER登录域,打开IE,访问http://wls.sso.com:7001/sso/index.jsp

   页面上将显示出用户的登录帐号,如果失败将会弹出用户登录对话框。失败了也不要紧,看一下WebLogic的输出,我们已经打开了debug开关,从其 中的错误信息我们可以发现是什么原因。具体请参考JAVA GSS-API的Troubleshooting,链接如下:http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html

5 总结
通过上面的介绍,相信大家已经可以成功配置自己的SSO了(可以看出整个过程还是比较简单的,对比一些SSO产品的超复杂配置过程)。由于时间原因, 本文写的比较仓促,难免有疏漏的地方。如果哪些地方描述有错误,请给我指出;或者根据上面的配置没有成功的,也请告知我。希望与大家交流,共同分享成功配 置SSO的快乐!

来自:http://middleware123.com/weblogic/security/511.html

WebLogic Server的单点登陆功能--转载,布布扣,bubuko.com

时间: 2024-12-04 15:18:54

WebLogic Server的单点登陆功能--转载的相关文章

两种单点登陆设计

单点登陆设计SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一      现在很多企业级应用都基本会去实现单点登陆功能,这样对于用户体验上会有不错的加强.不需要重复登陆多次.好了废话少说,我今天主要介绍两种单点登陆设计. 第一种:最简单的单点登陆设计,如下图: 如图所示:当直接访问各类业务系统时,在页面

php 用CAS实现SSO单点登陆及登出功能

php用CAS实现SSO单点登陆及登出功能 一..CAS服务器搭建 CAS服务器端下载地址:http://downloads.jasig.org/cas/ 解压cas-server-4.0.0-release.zip将modules目录下的cas-server-webapp-4.0.0.war改名称为cas.war复制到tomcat的webapps下,启动tomcat,访问:http://localhost:8080/cas/login 就可以看到登录界面了: cas服务端默认采用的是 用户名=

讲诉从酒店服务业到IT行业的心酸取经路,另附拙作 ASP.net(C#)利用SQL Server实现注册和登陆功能

楼主本人姓周,名XX,老家是曾国藩故居的,说起来和古人也算是邻里邻居. 92年出生,去年大专毕业,到现在毕业快要一年了,大学里学的专业是酒店管理,我们对外宣称为"第三产业"呵呵.到这里你们可能会心生疑问,咦,大学里怎么会有"酒店专业",你怎么会选它?说到这,楼主不得不提起一个人,那就是我的堂姐,楼主填志愿那年,人小不懂事,根本不知道如何去选择自己的专业,家里人就更不懂了,所以填志愿的事都在我这个堂姐手里做的主,填的那个学校是湖南长沙的,三年大专制,因为我这个表姐本人

WebLogic Server 管理

概念 WebLogic server(WLS)是有BEA开发,之后被Oracle并购并维护,是java开发应用服务器的主要工具之一,WLS出色的群集技术,Oracle WebLogic Server拥有最高水平的可扩展 性和可用性.WebLogic Server既实现了网页群集,也实现了EJB组件 群集,而且不需要任何专门的硬件或操作系统支持. 网页群集可以实现透明的复制.负载平衡以及表示内容容错,如Web购物车;组件群集则处理复杂的复制.负载平衡和EJB组件容错,以及状态对象(如EJB实体)的

SSO单点登录解决方案[转载]

1 什么是单点登陆      单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.      较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务.例如财务系统为财务人员提供财务的管理.计算和报表服务:人事系统为人事部门 提供全公司人员的维护服务:各种业务系统为公司内部不同的业务提供不同的服务等等.这些系统的目的都是让计算机来进行复杂繁琐的计算工

J2EE之WebLogic Server

WebLogic是用于开发.集成.部署和管理大型分布式Web应用. 网络应用和数据库应 用的Java应用服务器.将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发.集成.部署和管理之中. WebLogic Server拥有处理关键Web应用系统问题所需的性能 .可扩展性和高可用性. 与Oracle WebLogic Commerce ServerTM配合使用,Oracle WebLogic Server可为部署适应性个性化电子商务应用系统提供完善的解决方案.

集成基于OAuth协议的单点登陆

在之前的一篇文章中,我们已经介绍了如何为一个应用添加对CAS协议的支持,进而使得我们的应用可以与所有基于CAS协议的单点登陆服务通讯.但是现在的单点登陆服务实际上并不全是通过实现CAS协议来完成的.例如Google就使用OAuth协议来管理它的帐户. 相较于CAS协议,OAuth协议不仅仅可以完成对用户凭证的验证,更可以提供权限管理的功能.在这些权限管理功能的支持下,一个应用甚至可以访问其它使用相同OAuth服务的应用的数据,从而完成应用间的交互. OAuth集成示例 现在我们就来看一个通过OA

从零开始编写自己的C#框架(15)——Web层后端登陆功能

对于一个后端管理系统,最重要内容之一的就是登陆页了,无论是安全验证.用户在线记录.相关日志记录.单用户或多用户使用帐号控制等,都是在这个页面进行处理的. 1.在解决方案中创建一个Web项目,并将它设置为启动项 2.添加引用 3.添加WebManage文件夹与Login.aspx文件 4.添加登陆页面HTML代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx

单点登陆sso实现

需求: 多个bs业务系统,在某个业务系统登陆后,访问其他bs应用系统无需重复登陆. 制约:必须同一浏览器. 解决方案: 关键词:cookie,跨域,sso 环境 l Passport.com 登陆认证服务 l pis.com 病理业务系统 l lis.com 检验业务系统 l  login 拦截器:验证请求是否有令牌,令牌是否合法() l  令牌 ticket 括号内为增强功能 l  用户访问pis.com,拦截器发现无令牌或令牌无效,跳转至passport.com的登陆页面(防止恶意测试密码,