基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx

上传人:b****2 文档编号:15169652 上传时间:2022-10-28 格式:DOCX 页数:12 大小:181.32KB
下载 相关 举报
基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx_第1页
第1页 / 共12页
基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx_第2页
第2页 / 共12页
基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx_第3页
第3页 / 共12页
基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx_第4页
第4页 / 共12页
基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx

《基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

基于 SAML 的 WebSphere Application Server 单点登录的场景设计Word格式.docx

回页首

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:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1