基于 SAML 的 WebSphere Application Server 单点登录的场景设计.docx
- 文档编号:2251966
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:12
- 大小:181.32KB
基于 SAML 的 WebSphere Application Server 单点登录的场景设计.docx
《基于 SAML 的 WebSphere Application Server 单点登录的场景设计.docx》由会员分享,可在线阅读,更多相关《基于 SAML 的 WebSphere Application Server 单点登录的场景设计.docx(12页珍藏版)》请在冰豆网上搜索。
基于SAML的WebSphereApplicationServer单点登录的场景设计
基于SAML的WebSphereApplicationServer单点登录的场景设计
张涛,软件工程师,IBM
库俊国,软件工程师,IBM
简介:
本文向您介绍了如何在WebSphere环境下使用SAML实现单点登录的场景设计。
在向您介绍了SAML的基本概念之后,本文将一步步向您介绍如何搭建WebSphereApplicationServer之间的SAML单点登录环境。
引言
随着互联网规模的不断扩大,把一个用户的所有信息全部收集到一个地方,既不可能也不需要。
不同个人和组织在与不同的对象打交道时会使用不同类型的信息,例如用户在线购物并付款、会计师保存财政和税款记录等等。
经常性地将此信息移动到一个地点,只能使保持数据的准确性和及时更新更加困难。
同时,移动信息还会增加数据在传输中丢失和被窃的可能性。
单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
回页首
SAML介绍
通常来说,一个企业在物理或逻辑的范围已经界定了企业的IT安全。
然而,由于在线合作需要共享更可靠的安全服务环境,因此IT安全越来越成为人们关注的重点问题。
为了解决单点登录的问题,越来越多的系统通过Web服务、门户和集成化应用程序彼此链接,对于保证欲共享的信息安全交换的标准的需求也随之日益显著起来。
SAML(安全性断言标记语言,SecurityAssertionMarkupLanguage)正是为解决网络安全性问题而发挥其作用。
它允许不同安全系统产生的信息进行交换。
提供一个健壮且可扩展的数据格式集,在各种环境下交换数据和身份识别信息。
也就是说可使用独立、受管理的多个信息来源中的信息,从而实现身份严整这样的安全服务。
SAML是一种基于XML语言用于传输认证及授权信息的框架,以与主体相关的断言形式表达。
在这里,主体是一个实体(人或计算机),这个实体在某个安全域中拥有一个特定身份,断言可传递主体执行的认证信息、属性信息及关于是否允许主体访问其资源的授权决定。
SAML在标准行业传输协议环境里工作,例如HTTP、SMTP和FTP;同时也服务于各种各样的XML文件交换框架,例如SOAP和BizTalk。
SAML具备的一个最突出的好处,是使用户能够通过互联网进行安全证书移动。
也就是说,使用SAML标准作为安全认证和共享资料的中间语言,能够在多个站点之间实现单点登录。
回页首
基于SMAL的单点登录的场景设计
我们希望利用SAML实现不同服务器之间的单点登录实现。
我们设计一种自定义的单点登录场景。
这种场景使用SAML令牌API以及WebSphereApplicationServer所提供的支持SAML的API开发。
下图展示了客户端通过一个与公司服务器存在信任关系的身份验证提供方(IdentityProvider)鉴别并签发SAML令牌后,客户端携带被认证的SAML令牌继续访问公司服务器,公司服务器将判断此SAML令牌中的用户信息是否存在。
如果存在,公司服务器直接同意客户端的访问,而不需要要求用户再次进行身份验证了。
图1.自定义设计场景
接下来,客户端可以通过浏览器利用HTTP协议将SAML令牌传给应用服务器。
服务器端通过建立一个信任联合拦截器(TrustAssociationInterceptor:
TAI)拦截客户端请求。
将HTTP请求中的SAML令牌信息解析并转换成Subject,同时得到客户端的用户ID。
如果服务器端验证用户ID是合法的,则将为客户端提供服务。
具体的流程如下:
图2.自定义设计场景的流程图
整个流程如下:
1.用户首先请求WebSphereApplicationServer1的服务。
2.服务器1的TAI判断用户未授权,而将用户的请求转发到一个自定义的登录页面。
3.用户在登录页面上输入自己的认证信息,提交后转到第三方STS上做认证。
4.STS从外部Registry判断用户认证信息是否正确。
5.如果用户信息正确,STS会为用户生成一个SAML令牌给SAML代理。
6.SAML代理是一个Servlet,它会带着这个SAML令牌重新请求服务器1的服务。
7.服务器1的TAI从SAML令牌中提取出UserID。
8.TAI从Registry中验证此UserID是否合法。
9.如果合法,服务器1会在Cookie为用户生成一个LTPA令牌。
10.用户的Cookie中存在已认证过的LTPA令牌,服务器1为用户提供服务。
11.生成LTPA令牌的同时,在同一个安全域之内的服务器将相互共享LTPA令牌。
12.当用户继续访问WebSphereApplicationServer2的时候,可以不用认证直接访问服务。
从而实现两个服务器之间通过SAML令牌进行单点登录。
回页首
基于SMAL的单点登录的场景实现
1,实现客户端直接访问服务器上的应用
图3.客户端直接访问服务器设计场景
在这里我们使用的WebSphereApplicationServer的版本为7.0.0.7。
因为此版本提供了对SAML的支持。
测试使用的应用服务为DefaultApplication中的snoop应用。
我们先在WebSphereApplicationServer的管理控制端启动全局安全性中的应用程序安全性,使客户端必须认证才可访问WebSphereApplicationServer上的snoop应用。
在WebSphereApplicationServer的控制台,进入Security>Globalsecurity页面,开启应用安全(Enableapplicationsecurity)
图4.开启应用安全
重新启动应用服务器之后,访问snoop应用(如http:
//localhost:
9080/snoop),应用提示需要输入验证信息才能访问:
图5.访问snoop应用提示验证
编写一个简单的Servlet,设置认证信息并访问snoop应用,测试认证通过后是否可以直接访问Web应用:
清单1.snoop访问代码
URLurl=newURL("http:
//localhost:
9080/snoop");
HttpURLConnectionurlConnection=
(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("GET");
StringencodedUserPass;
Stringuserpass="username:
password";
encodedUserPass=
newsun.misc.BASE64Encoder().encode(userpass.getBytes());
urlConnection.setRequestProperty("Authorization",
"Basic"+encodedUserPass);
由于之前服务器端设置过安全性,在程序访问此url的时候,服务器会判断客户端是否有权限访问。
如果设置的认证合法则程序顺利执行,如果认证不合法或者为空则报告没有权限访问的错误。
图6.未输入验证信息,页面无权限访问
2,实现客户端自签发SAML令牌,并通过TAI访问服务器上的应用
图7.客户端利用SAML通过TAI访问服务器设计场景
此场景比上一场景增加了一个SAMLTAI,即信任联合拦截器(TrustAssociationInterceptor:
TAI)。
TAI的功能是拦截HTTP的请求,执行相应的操作。
WebSphereApplicationServer自带两种拦截器com.ibm.ws.security.spnego.TrustAssociationInterceptorImpl和com.ibm.ws.security.web.TAMTrustAssociationInterceptorPlus。
这里的TAI是我们自定义的,用于拦截请求解析SAML令牌使用。
自定义的TAI需要实现com.ibm.wsspi.security.tai.TrustAssociationInterceptor接口。
这个接口有三个方法,即:
∙publicintinitialize(Propertiesprops)
当TAI初始化成功,返回0,TAI会继续执行isTargetIntercept方法。
∙publicbooleanisTargetInterceptor(HttpServletRequestreq)
判断拦截的请求是否为目标请求,如果是返回true,TAI会继续执行negotiateValidateandEstablishTrust方法。
∙publicTAIResultnegotiateValidateandEstablishTrust
(HttpServletRequestreq,HttpServletResponseres)
TAI会在此方法中执行所需要的操作。
返回的TAIResult将通过WebSphere服务器自身的安全机制,验证生成的Subject及用户ID是否合法。
清单2.isTargetInterceptor函数代码
publicbooleanisTargetInterceptor(HttpServletRequestreq)
throwsWebTrustAssociationException{
Stringuri=req.getRequestURI();
if(uri.indexOf("snoop")!
=-1){
Stringtoken=req.getHeader("SAMLToken");
if(token!
=null){
returntrue;
}
}else{
System.out.println("Thisisnotthesnoopapplication.");
returnfalse;
}
returnfalse;
//returntrueifthisisthetargetinterceptor,elsereturnfalse.
}
在清单2中:
在第4行上isTargetInterceptor函数首先判断此次请求是否访问的是snoop应用,如果是snoop应用,则继续执行清单3中的negotiateValidateandEstablishTrust函数。
清单3.negotiateValidatean
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 SAML WebSphere Application Server 单点登录的场景设计 单点 登录 场景 设计
链接地址:https://www.bdocx.com/doc/2251966.html