java实现跨域单点登录 [基于.NET,Web服务的跨域单点登录系统的实现]
摘要:ASP.NET没有跨域单点登录的实现机制。分析了跨域单点登录的原理,提出了一种在SSO网站存储登录的用户对象,浏览器Cookie中存储SSO网站的用户令牌,信任网站之间传递令牌、间接共享Cookie的跨域SSO解决方案。
关键词:ASP.NET;跨域;单点登录;Web服务
中图分类号:TP315文献标识码:A文章编号:1009-3044(2012)20-4907-02
Implementation of Cross-domain Single Sign-on System Based on .NET Web Service
XU Hui
(School of Information and Statistics,Guangxi University of Finance and Economics, Nanning 530003,China)
Abstract: ASP.NET does not have cross-domain single sign-on(SSO) implementation mechanism. This paper analyzes the cross-domain single sign-on principle, proposes a cross-domain SSO solution that logged-in user object is stored in SSO website, user token is stored in browser’s Cookie, and then user token is passed between trusted sites, indirectly sharing Cookie.
Key words: ASP.NET; cross-domain; single sign-on; Web services
在当今WWW的广泛应用中,许多单位已经为内部的各个应用系统和Web门户网站使用统一身份认证中心进行用户认证。单点登录(SSO,Single Sign On)是流行的统一身份认证解决方案之一。焦亚楠等人[1]提出了一种用Java实现、基于SAML的跨域单点登录解决方案;岳小婷[2]提出了.NET平台下同一主域下的单点登录实现方法;许小东等人[3]提出了在.NET平台下使用Forms身份认证机制的单点登模型。对于跨域的单点登录,ASP.NET没有提供内置的实现机制。因此,针对这一问题,该文提出一种采用SSO网站集中存储登录用户的用户对象,使不同域名的信任网站之间间接共享Cookie,生成用户令牌在信任网站之间传递的SSO实现模型。
1 NET跨域单点登录模型
为了实现.NET跨域的SSO,引入一个专用的SSO网站,该网站有一个存储用户身份信息和授权访问信息的数据库,用于验证用户身份、设置身份验证Cookie,以及授权访问。跨域SSO模型如图1所示。在该模型中,浏览器不储存每个信任网站的身份验证Cookie,而是存储SSO网站的唯一身份验证Cookie。浏览器对SSO模型下的任何信任网站的每个请求都重定向到SSO网站,由SSO网站检查用户的身份验证Cookie是否存在。如果存在身份验证Cookie,表明用户已经登录,则从原请求的信任网站中提供授权的网页给浏览器。如果不存在身份验证Cookie,则用户被重定向到相应网站的登录页面。
浏览器存储一个名为AuthUserToken的Cookie,其值的格式为“用户令牌|有效时间”。用户令牌是SSO网站验证用户身份成功后返回的全局唯一值,表明用户已通过SSO身份认证。跨域单点登录的过程为两个阶段:
1)匿名用户访问网站1的授权页面,首先重定向到SSO网站,并在URL中加入原请求的URL为参数。SSO网站检查浏览器是否设置了身份验证Cookie,或请求中是否含有用户令牌。如果两者都没有,则重定向到网站1的登录页面。用户输入凭据后,网站1调用SSO网站的Web服务,验证用户凭据。如果验证成功,则返回登录的用户对象和用户令牌。此令牌是在用户每次登录时产生的GUID值。网站1标识已登录的用户(如在Cookie中存储用户令牌),将原请求URL和用户令牌作为新请求的参数,重定向到SSO网站。SSO网站检查传入的请求URL,发现用户令牌参数,但没有可用的身份验证Cookie,这表明用户已通过网站1的验证。因此,SSO网站使用令牌,从用户信息数据库中检索用户,设置身份验证Cookie、用户信息,以及有效时间等。然后重定向到网站1中最初请求URL的授权页面,并在网址中传递令牌。网站1发现请求中含有用户令牌,通过调用SSO网站的Web服务,验证通过后,将最初请求页面输出到浏览器。这一过程对应于图1的步骤1-步骤7。
2)在网站1登录的用户浏览器访问其他信任网站(如网站2)的授权页面时,将此请求作为URL参数重定向到SSO网站。由于浏览器已经拥有SSO网站的身份验证Cookie,因此将这个Cookie添加到请求参数,再发送请求到SSO网站。SSO网站检查传入的请求,找到身份验证Cookie,检查该Cookie是否已过期。如果不过期,则从Cookie中检索用户令牌,并将请求重定向到网站2的最初请求URL,并在URL中加入用户令牌参数。因此,网站2通过调用SSO网站的Web服务,验证用户令牌成功后,执行网站2的最初请求页面,将响应输出到浏览器。这一过程对应于图1的步骤8—步骤11。
2 NET的跨域单点登录设计
2.1 SSO组成模块
基于.NET web服务的跨域单点登录系统由四个模块组成:登录模块、身份认证模块、Web服务代理模块、授权管理模块。登录模块实现用户密码的一次性验证;身份认证模块提供Web服务方法,验证用户的合法性;Web服务代理模块用于信任网站调用SSO网站的Web服务;授权管理模块授予合法用户的访问资源权限。
