本文场景: LDAP + wso2 Identity Server + asp.net声明感知 场景 ,假定读者已经了解过ws-*协议族,及 ws-trust 和 ws-federation.
随着开源技术的发展,越来越多的优秀开源产品将加入到我们常规的业务系统,为了避免重复造轮子(实际上自己造的轮子质量非常差),我们最快的方法就是集成优秀的开源项目为我所用.
下面来说说集成中的挑战之一: 用户认证问题.
本人是一个在ASP.NET下工作的码农,在2010年的时候研究过windows identity foundation(下面简称WIF)技术,第一次感受到了声明式认证方案的魅力.从此对声明式认证非常狂热. 声明式认证有两个主要的参与者: RP 与 STS ,详见:http://msdn.microsoft.com/zh-cn/library/ee517293.aspx .
若干RP应用 信任统一的STS(当然也可以STS再信任STS,场景较复杂),来实现单点登录. 谈到单点登录,相关的技术方案太多,如CAS,不过就SOA生态下,还是习惯ws-*级别的安全.所以我下面来着重讲解如何构建STS及使用声明感知的身份验证.
对做过sharepoint的朋友应该非常熟悉 , sharepoint就采用了WIF技术,可以将ADFS做为STS进行企业内部统一身份认证,那么如果我们工作环境是linux怎么办呢? 开源的东西向来不怎么依赖windows. 那们我们需要利用下LDAP ,LDAP本身是一个协议,实现此协议的有:
有了跨平台的目录服务,我们难道是直接用? 这当然是需要写很多代码的...我们还需要一个更加强大的产品包装一下LDAP,如 :
在发现WSO2这个强大的开源系列之前,我曾经尝试过 自己手写代码构建STS(要具备安全领域技术栈的知识,如证书,签名等),后来发现用WIF框架手写STS做个简单的demo还是很容易,但是做到兼容万家产品可不是那么容易,毕竟各种开源项目使用的认证协议不一样,于是我找到了一个相当出色的开源项目:
Thinktecture.IdentityServer (c#开发的)
此项目支持的协议(Endpoint)很多了,比如OAUTH ,ws-federation hrd,还可以扩展多种标识服务提供器(如ADFS)....
此项目因为界面看起来很丑陋,而且目测感觉只是试验型项目最终被我抛弃, 俗话说旧的不去新的不来,正是因为我抛弃了它,目光放得更加远了,经常各种资源搜集,我碰到了上面提到的 WSO2 Identity Server!!!!
WSO2旗下有很多产品,详情可到官网上了解,貌似都开源免费.是世界顶级SOA服务商.(吹捧至此为止 ^_^)
WSO2的开源产品安装极傻瓜,只要双击bat文件就能运行,而且不用任何配置就能看得到界面,对于我这种java水平很差的.NET程序员来说可谓是太友好了. 你可能在思考,难道都不用配置数据库的么? 实际上它默认用了一款嵌入式数据库H2 database , 额,我个人只知道微软有个SQLCE,终于见世面了.....
WSO2 identity server 文档里面囊括了各种安全相关的字眼,如OAuth,openid,ldap,sts,证书,.....,好吧我们现在来说说怎么用它吧.
它内置了我上面介绍的apacheds LDAP ,默认把用户保存到此,你可以在<wso2is_ROOT>\repository\conf\user-mgt.xml 下找到它的连接参数,两样你可以使用LDAPAdmin这类LDAP客户端工具连接进去查看,关于LDAPAdmin的使用见:http://www.pfeng.org/archives/564
关于如何使用它做 被动STS详见: http://wso2.com/library/articles/2011/12/configuring-wso2-identity-server-passive-sts-aspnet-client/
稍后再补充,