基于SAML的单点登录技术在校园网中的应用研究及实现*

2013-09-13 04:08杨艳明
楚雄师范学院学报 2013年9期
关键词:断言权威消息

杨艳明

(楚雄师范学院计算机信息管理中心,云南 楚雄 675000)

1.引言

随着计算机技术和通信技术的发展,单点登录 (SSO)技术也得到了越来越广泛的使用,在各种应用系统中提高安全性和方便性,通过相互之间交换安全信息,单点登录可以实现同一用户对不同系统的访问,而不需要对用户进行多次认证,这不仅提高了应用程序的安全性,也方便了用户,提高了工作效率。针对我校校园网的实际情况,本文提出了一种.NET平台下基于SAML的单点登录系统,并实现其主要部分,以期在校园网中得到应用。

2.系统结构

2.1 主要组成部分

根据SAML规范进行设计,可以将基于SAML的单点登录系统划分为SAML权威、应用系统和用户代理三个部分:SAML权威是安全信息的提供方,也称为认证服务器,是单点登录系统的核心,是服务的提供者;应用系统向用户提供某种资源或服务,它由两个部分组成:负责提供服务的应用程序和用来实现单点登录功能的单点登录客户端程序;用户代理一般是指浏览器,在本系统中可以使用各种常见的浏览器,但要求浏览器支持TLS1.0或者SSL3.0,可以保证信息传输过程中的安全。根据设计,本系统共使用了SAML规范中的SAML认证请求协议、HTTP POST、HTTP重定向 (即Redirect)和HTTP辅件绑定等技术。

2.2 处理流程

在该系统中,用户可以首先访问SAML权威来认证自己的身份,也可以不认证就直接访问Web应用程序。Web应用程序会对接受到的所有访问请求进行检查,对于尚未通过认证的用户,就把请求重新定向给SAML权威,要求它对该用户进行认证。详细处理流程如下:

(1)用户代理向应用系统发送HTTP请求消息,请求访问相关资源;

(2)为了对请求进行响应,收到请求的应用系统会返回一个含有辅件或者<AuthnRequest>消息的HTTP应答消息,而用户代理则会将该消息转发到SAML权威处。该消息或应答会被用户代理转发给SAML权威;

(3)按照SAML规范所定义的规则,SAML权威应处理所收到的<AuthnRequest>消息;

(4)SAML权威可以使用某种特定方法来识别用户的身份。为了正确识别用户,SAML权威还需要建立用户的身份标识,如果建立失败则需要返回错误信息给发送请求的应用程序;

(5)认证完成后,SAML权威会给用户代理发回一个<Response>消息,用户代理再将该消息转发到应用程序处。在此过程中,消息的传输可以使用HTTP POST或者HTTP辅件绑定来实现。不管<AuthnRequest>消息处理结果是成功还是失败,SAML权威都应该生成含有辅件或者<Response>消息的HTTP应答消息并将其发回给用户代理,而该消息最终会被转发到需要对用户身份进行识别的应用系统处;

(6)最后,应用系统将会对所收到的来自SAML权威的应答消息进行处理,检查<Response>中所包含的各个断言元素,并根据其包含的信息来判定是否应该同意或拒绝用户对系统中资源的访问请求。

2.3 SAML断言及认证请求

在SAML规范中,断言是一个重要的内容,它封装了描述用户的安全信息,除了作为其主要成分的声明 (分为认证声明和属性声明两种)外,断言还包含有相关约束条件和其他内容。断言包含有ID、IssueInstant和Version三个属性:ID是断言的标识符,可以在引用某个断言的时候使用它,属于XML模型中定义的ID类型;IssueInstant是SAML断言发布的时间,采用CCYY-MM-DDThh:mm:ss的格式,字符T是日期和时间之间的分隔符;属性Version则指明该断言所遵循的SAML规范的版本。

在本系统中还使用了SAML规范定义的认证请求协议。作为请求者和依赖方,需要对用户进行认证的应用系统首先向SAML权威发送请求认证消息<AuthnRequest>;而作为应答者和断言方,SAML权威在收到请求认证消息后对用户身份进行认证,并在认证结束后根据结果返回<Response>消息。

(1)请求认证消息<AuthnRequest>

在请求认证消息<AuthnRequest>中,应用系统可以根据需要加入SAML规范中允许的任何信息。在SAML权威对其中所包含的信息进行处理过程中,必须遵循SAML规范的规则。若SAML权威未能正确回复请求认证消息,则必须返回一个包含合适状态信息的<Response>消息。另外,<AuthnRequest>消息还可能包含数字签名,如果双方使用HTTP辅件绑定的方式,则可以自由选择是否进行认证,如果要认证也可以使用HTTP辅件绑定所允许的任何一种方法。

(2)认证应答消息<Response>

若<AuthnRequest>消息请求成功,则SAML权威必须返回一个应答消息<Response>,该消息至少要包含一个断言元素<Assertion>和一个认证声明元素<AuthnStatement>,而且在断言中的<Issuer>部分必须包含能唯一标识发布断言的SAML权威的信息。如果SAML权威的目的只是返回一个错误信息,则不能将任何断言放在<Response>消息中。

3.SAML权威

SAML权威是本系统的核心部分,它主要完成两个功能:一是采用合适的方法确认用户的身份,并向用户提供访问各个Web应用系统的入口;二是向各个Web应用系统提供所需的SAML断言,使得这些Web应用系统能够对用户的访问进行有效地控制。

3.1 认证用户身份

本模块的主要功能是认证用户身份,根据需要还可能会使用到其他模块提供的服务。在本系统中,使用了用户名和密码的方式来认证用户,为了进一步提高认证功能的安全性,还要求浏览器和认证服务程序都支持SSL3.0或者TLS1.0,这样就可以减少用户安全信息在传输过程中泄露的可能性,降低了系统遭受恶意攻击的概率。同时,为了在以后的扩展中使用其他的强认证机制来提高系统的安全性,如PKI、Kerberos等,系统也留下了相关的编程接口。为了对用户的身份进行验证,系统还需要使用数据库来保存各个用户的安全信息和具有的属性。另一方面,各个Web应用系统则在收到SAML断言后,会根据用户所具有的属性来决定是否允许其对站内服务和资源的访问。

3.2 生成SAML断言

本模块的主要功能是根据请求生成相应的SAML断言。为了生成正确的断言,需要同时使用数据库中保存的用户信息和系统相关信息。在断言生成操作中,首先要按照用户的标识符从数据库中获取用户信息,并结合用户信息和系统级信息生成合适的能够描述用户属性的断言,然后就要使用SAML断言管理模块提供的程序将新生成的断言注册到系统中,接下来就由该模块对断言进行管理了。

3.3 管理SAML断言

本模块的主要功能是管理SAML断言及和它一起配合使用的辅件数据,具体包括注册断言和辅件数据、查询或者删除它们。SAML断言是具有有效期的,在有效期内断言可以被Web应用系统使用任意次,但超出有效期就不能使用了。在本系统中,使用了数据库来存储断言和辅件数据artifact,这样可以获得更好的效率。

3.4 处理SAML协议消息

在SAML规范中,对于如何在SAML权威和Web应用系统之间交换SAML断言提供了详细的协议,而且还定义了协议的消息结构和完备的处理规则。这些断言交换协议都是采用请求-应答的方式,客户端先发送一条请求消息,服务器端收到请求消息后,会按照预先定义的规则来处理请求,并根据处理结果返回相应的SAML断言 (处理成功)或者错误信息 (处理失败)。为了共享描述用户的安全信息,作为服务器端的SAML权威和作为客户端的Web应用系统需要使用这些协议。本系统中,SAML权威和Web应用系统使用了SAML规范中定义的两个协议:辅件artifact处理协议和断言获取协议。

该模块通过消息传输模块接收客户端发送来的ArtifactResolve消息和AssertionIDRequest消息,进行合适的处理后,生成相应的ArtifactResponse消息或者Response消息返回给客户端。收到请求消息后,如果是加密过的则要进行解密操作,然后对其有效性进行验证,如验证签名、验证有效期和执行SAML规范中定义的其他需要的验证工作。成功通过验证的请求消息才能进入下一个处理环节,否则就会被当作无效消息而丢弃掉。完成请求消息的验证工作后,本模块会使用请求消息中的参数到SAML断言管理模块处获取客户端需要的SAML断言。如果获取成功,正确的断言就会被作为ArtifactResponse或者Response消息的一部分经由消息传输模块返回给客户端。

SAML协议消息是按照XML格式编写的,但在消息传输模块处就被转换成了具体编程语言能够操作的数据结构,这样就减轻了消息处理模块的工作负担。反之,消息处理模块生成的应答消息也会被消息传输模块转换成XML格式。

3.5 通过SOAP进行消息传输

消息传输模块负责与具体的传输协议如SOAP、HTTP等的绑定操作,并通过建立好的绑定传输以XML格式组织的SAML协议消息。消息传输模块从SAML协议消息处理模块处得到以编程语言可处理的数据结构封装的SAML协议消息,进行相应处理转换成XML格式后,通过所绑定的传输协议发送出去。同时,消息传输模块通过绑定的传输协议接收客户端发送来的信息,然后解析转换成编程语言可处理的数据结构,并把它交给SAML协议消息处理模块。

在本系统中,通过SOAP over HTTP的绑定方式,使用Web Service的模式来实现SAML协议消息的交换。Web应用系统向SAML权威提出请求,使用其提供的服务,并根据请求处理结果得到不同的信息。

4.SSO客户端

SSO客户端程序包含在需要使用单点登录服务的每一个Web应用系统中,它代表Web应用系统向SAML权威提出服务请求,并将封装在返回消息中的SAML断言取出来交Web应用系统。SSO客户端包含三个组成部分:SAML断言处理模块、SAML协议消息处理模块和消息传输模块,三个模块之间分工协作,共同完成连接SAML权威和Web应用系统、实现用户在多个系统之间只登录一次就可以随意访问的目的。

SSO客户端所实现的主要功能是向SAML权威请求SAML断言,并进行初步处理后将其交给Web应用系统。为了实现这一目的,SSO客户端需要和SAML权威进行通信,它首先向服务器发送包含ArtifactResolve或AssertionIDRequest消息的访问请求,该请求中的参数指明了所需的SAML断言;收到客户端的请求消息后,服务器进行相应的处理,并将处理结果发回给客户端。SSO客户端会对收到的信息进行解析处理,并将其中包含的断言信息传递给Web应用系统。

4.1 通过SOAP进行消息传输

客户端消息传输模块的功能和实现机制与服务器端消息传输模块一致,此处不再赘述,相关内容请查阅本文3.5节。

4.2 处理SAML协议消息

本模块的主要功能包括以下两个方面:1)按照提供的辅件信息生成对应的ArtifactResolve或AssertionIDRequest消息,并将其交给消息传输模块;2)接收消息传输模块转交来的ArtifactResponse或Response消息,解析出封装在其中的SAML断言并将其交给后面的SAML断言处理模块。如果收到的消息是加密过的,则先进行解密操作,然后执行签名验证、有效期验证及其他SAML规范支持的验证操作。成功通过验证操作的消息才会被交个断言处理模块,没有通过验证的则视为无效信息被丢弃。

4.3 处理SAML断言

SAML断言处理模块的功能是从接收到的断言信息中解析出封装的用户安全信息,并将其传递给需要对用户进行验证的Web应用系统。有些断言可能具有数字签名或有效性限制条件,还可能是经过加密的,本模块需要根据不同的情况执行合适的操作:带有数字签名的,需要对数字签名的有效性进行验证,确定签名者的可信任度;带有有效性限制的,需要根据SAML规范执行验证操作,只有处理结果为有效的断言才能被Web应用系统使用;对于加过密的断言,需要根据加密技术进行解密。处理完成后,本模块还需要将断言转换成Web应用系统可以直接使用的格式。

5.SAML权威的实现

SAML权威有多个组成部分,分别完成不同的任务,通过协作来实现系统的总体功能,根据各个模块任务的特点应该使用不同的技术来实现。

(1)用户认证模块的任务是确认用户的真实身份,是整个应用程序逻辑的入口,可以使用ASP.NET WEB应用程序来实现;

(2)生成、管理及处理SAML断言和处理SAML协议消息这几个模块会被其他模块调用,所以可以实现为动态连接库,并在部署应用程序时将其包含在内。这几个模块可以将其实现为类库,打包部署在.NET框架中;

(3)由于WEB服务中使用了SOAP技术,可以在相互之间传递XML格式的断言信息。因此,消息传输模块也可以实现为ASP.NET WEB服务的形式;

(4)所有数据均存储在数据库中,方便执行保存、查询、更新和删除操作,同时也能提高管理效率和方便性。在本系统中,有用户基本信息、用户属性信息和SAML断言需要保存。

5.1 用户认证模块的实现

本模块是整个系统的入口,需要和用户进行交互以获取用户的身份信息并进行验证。根据前面的分析,本模块将使用ASP.NET Web技术来实现,包含系统流程控制、登录验证和Web应用程序入口三个部分。

(1)系统流程控制

本组件首先接收来自用户的访问请求,并根据请求中携带的信息和用户会话判断请求所属的类别。在这里,我们把用户的请求分为五类:1)用户已经输入名称和密码,请求登录,可以直接将请求转发给登录验证组件;2)用户已经成功登录,请求访问某个Web应用系统,可以直接将请求转发给Web应用程序入口组件;3)用户已经成功登录,请求注销登录状态,需要结束用户会话并将关联的日志信息保存到数据库中,然后将用户重定向到登录页面;4)用户是首次访问,请求中也没有携带其他任何数据,则直接将用户定向到登录页面;5)用户是首次访问,但访问请求是由Web应用系统转发来的,其中包含了转发者的标识信息 (URI),可以先将Web应用系统的标识信息存储在会话中,然后再将用户定向到登录页面。

(2)登录验证

本组件负责对用户的身份进行确认,验证过程中使用的是用户名和密码信息。如果数据库中不存在该用户名或者用户存在但密码不对,则验证失败,需要向用户返回错误页面;反之则登录成功。用户登录成功后,系统就会生成描述用户安全信息的SAML断言及辅助信息,然后将用户请求传递给Web应用程序入口。

(3)Web应用程序入口

本组件向成功登录的用户显示所有集成到系统中的Web应用程序列表,提供访问入口。如果用户请求是由登录组件发送过来的,则需要将数据库中存储的用户可以访问的所有Web应用程序信息查询出来,和用户请求一起显示给用户。如果用户请求是由某个Web应用程序转发过来的,则需要调用SAML断言管理模块来生成本次请求的辅件,并将其随访问请求一起发送给Web应用程序。

5.2 生成和管理SAML断言

(1)生成断言

为了描述SAML断言及其各种组成部分,系统中设计了一系列的类,如Assertion类、AuthnStatement类、AttributeStatement类、Conditions类、Issuer类、Subject类、AuthnContext类、Attribute类、AudienceRestriction类、ProxyRestriction类和NameID类等。各类的关系见下图:

所有的类都有各自的方法和属性,包含了对应XML元素的子元素和属性等信息,而其方法则提供了一种访问属性的手段。在每个类中,都提供了一个名为toXML()的方法,它可以将类中包含的信息转换成对应的XML文档。另外,还有一个名为AssertionFactory的类,专门负责生成所需的SAML断言。

(2)管理断言

为了对断言进行管理,需要提供插入新断言、删除断言和查找断言等功能。另外,客户登录过程中用来获取断言的辅件,也需要在本模块中生成。

AssertionManager类负责对断言进行管理,它提供了相应的方法来完成各种操作:openConnection()方法可以连接数据库、closeConnect()方法可以断开已经连接的数据库、saveAssertion()方法可以把断言保存到数据库中、GetArtifact()方法可以生成并保存辅件。另外,该类还有一些方法可以对用户事件是否有效、断言是否超出有效期等方面进行验证。其中,断言管理工作的重点是查询,SAML协议消息处理模块会经常调用此功能来获取所需的断言。

5.3 处理SAML协议消息

本模块的任务是接收由传输模块转发来的SAML协议消息,并根据需要从数据库中取出断言,然后生成对应的应答消息交给传输模块。

本模块的功能主要由MessageParser类来实现,它负责将XML格式的协议消息转换成对应的C#类对象。转换工作的结果是一个ArtifactResolve类对象,里面包含了请求信息。然后,由MessageFactory类对转换后的协议消息进行有效性验证,验证通过则继续进行处理,否则直接向传输模块发送不包含任何断言信息的ArtifactResponse消息。

5.4 传输模块

SAML协议信息的传输由AssertionService类完成,是一个Web服务程序。该类属于Sbsso.Protocol名称空间,超类是System.Web.Service名称空间下的WebService类。由于其继承关系,此Web服务可以使用任何地方定义的ASP.NET标准对象。

6.SSO客户端的实现

6.1 数据传输

Web应用程序中的SSO客户端程序负责接收来自协议消息处理模块的SAML协议数据,将其封装在SOAP协议数据单元中,然后调用对应的Web服务进行传输,并接收对方返回的应答消息,转交给协议数据处理模块。

6.2 SAML协议消息处理

SAML协议消息处理模块完成两个方面的工作:生成请求消息和解析应答消息。为了向SAML权威请求描述用户安全信息的SAML断言,SSO客户端会先生成一个SAML协议消息。反之,收到SAML权威返回的应答消息后,也需要进行相应的解析处理,取出封装在里面的协议消息。

SSO客户端给SAML权威发送的信息封装在AssertionIDRequest类和类ArtifactResolve对象中,指明了所请求断言的辅件信息或者断言ID引用。与此对应,SAML权威返回的Response或者ArtifactResponse应答消息会由ResponseParser类的方法将其转换成相应的C#类对象。

6.3 处理SAML断言

需要对断言进行两个方面的处理:1)对于加了密或者使用了数字签名的断言,可以按照XML加密规范和XML签名规则进行对应的处理;2)如果SAML断言封装在C#类对象中,则要进行有效性严整,验证通过则返回其中包含的信息,验证失败则返回空的断言。有效性验证的内容包括三个方面:1)验证断言的有效期;2)作为断言接收方的SSO客户端是否位于有效的接收者名单中;3)断言的使用次数是一次还是多次,有没有超出次数限制。

AssertionValidate类负责对断言进行有效性验证,它提供了对应的方法来执行这些操作。

7.系统部署

根据上以的设计及实现方法,结合我校实际,可做如下部署:

(1)SAML权威的部署

作为联合身份认证的关键部分,SAML权威应部署于校园网内独立服务器中,并最大限度地保证服务器的安全。用户信息和断言的存储采用数据库技术,可选用适合的数据库产品进行存储,如SQL Server等。由于本系统采用C#作为开发语言,因此,SAML权威服务器上应安装.NET Framework平台和IIS软件,并部署相应ASP.NET Web应用程序和ASP.NET Web服务。

(2)单点登录客户端的部署

单点登录客户端应分别安装于各个Web应用系统中。由于目前只实现了.NET版本,所以只支持ASP.NET应用程序的单点登录。如果要支持其他技术实现的应用系统,则必须先开发单点登录客户端的相应语言版本。

[1]Scott Cantor,John Kemp,Rob Philpott,Eve Maler.Assertions and Protocols for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://doc.oasis-open.org/security/saml/V2.0/saml-core-2.0-os.pdf.

[2]Scott Cantor,Frederick Hirsch,John Kemp,Rob Philpot.Env Maler,Bindings for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://doc.oasis-open.org/security/saml/V2.0/saml-bindings-2.0-os.pdf.

[3]John Hughes,Scott Cantor,Jeff Hodges,Frederick Hirsch,Prateek Mishra,Rob Philpott,Eve Maler.Profiles for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://doc.oasis-open.org/seeurity/saml/V2.0/saml-profiles-2.0-os.pdf.

[4]John Kemp,Prateek Mishra,Rob Philpott,Eve Maler.Authentication Context for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis- open.org/committees/documents.php?wg_abbrev=security.

[5]Frederick Hirsch,Rob Philpott,Eve Maler.Security and Privacy Considerations for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis-open.org/committees/documents.php?wg_abbrev=security.

[6]Prateek Mishra,Rob Philpott,Eve Maler.Conformance Requirements for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis-open.org/committees/documents.php?wg_abbrev=security.

[7]Jeff Hodges,Rob Philpott,Eve Maler.Glossary for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis-open.org/commi ttees/documents.php?wg_abbrev=security.

猜你喜欢
断言权威消息
von Neumann 代数上保持混合三重η-*-积的非线性映射
C3-和C4-临界连通图的结构
各大权威媒体聚焦流翔高钙
一张图看5G消息
Top Republic of Korea's animal rights group slammed for destroying dogs
跟踪督察:工作干得实 权威立得起
权威发布
路、圈的Mycielskian图的反魔术标号
权威的影子
消息