SSO单点登陆的实现

Posted on 2007-05-09 11:57  尼古拉斯  阅读(2450)  评论(10编辑  收藏  举报

SSO (Single-Sign-on)的功能现在已经被大量地采用了。
微软也推出了一系列的 SSO解决方案,比如ADFS。
我这篇文章不是想介绍ADFS,有兴趣的朋友可以到MSDN上查看。
我前不久抽空花了一天的时间写了SSO的框架。
这个框架的核心是一个SSO的服务,所有的web 应用在登陆之前必须要通过一次验证,只要有一个web应用通过了认证,所有的其他的web应用都不需要再进行验证而自动获取了登陆用户的身份。
基于这个框架,你们只需要写几行简单的代码就可以把一个web应用实现SSO的功能。
源代码在这里:
/Files/yufengmiao/SsoService.rar
源代码在附件中,我简单地介绍一个下源代码中的几个工程。
1. SsoFramework
    这是一个类库,实现了SSO的API和加密的API
2. WebAuth
   这个SSO的服务器,所有没有经过认证的web 应用都将redirect到这个服务进行认证,如果还没有登陆,就显示登陆框,如果已经有一个应用经过了认证,就直接把Token返回。
  这个项目中最主要的文件是Authenticate.aspx,所有的认证请求都会被转到这个页面,如果是第一次验证,会被rediect 到logon.aspx页面
3. AppHR
   这是一个HR的web 应用,简单起见,我没有写任何关于HR的代码,只有认证的代码和一个default页面。第一次访问 default.aspx会被redirect 到sso.aspx,sso.aspx 再redirect 到webauth 的authenticate.aspx
4. AppCRM
   这个项目和AppHR 一样,只是想体现单点登陆的效果,用户可以在AppHR中登陆,然后再访问AppCRM,你会发现你不需要再登陆,就会自动通过了认证。

这套代码可以实现垮域认证,笔者发现网上有一些SSO的示例代码都不具有垮域的功能,所有的web 应用都必须具有相同的一级或二级域名。我实现的这套代码是通过request而不是cookie传递认证信息的。
所有的request token只能被用一次,不存在被黑客攻击的问题。
加密算法采用 SHA-1和 3DES,是目前比较好的算法。
大家看完代码如果有问题,欢迎来问我。

Copyright © 2024 尼古拉斯
Powered by .NET 8.0 on Kubernetes