ruilin215 发表于 2013-2-1 09:59:08

C/S中利用域控进行SSO的简单实现方式

<div class="Section0">我先简单的介绍一下我的需求。我希望我做的软件中,可以与域控集成,实现单点登录,且不需要额外输入帐号秘密。当然这是在已经登陆到域的前提下。
为此我翻过很多资料。Windows确实提供了API来操作登录。但小弟比较愚笨,一直感觉这些API使用起来很笨拙。且根据系统需求,往往进行域控帐号认证,都是在服务器上进行的。因为你的机器可能不能访问到我的域控服务器。对于一般的IT服务器部署,域控服务器都是在一个安全区域里面的。
在此之前,我已经实现了一个WebService,提供了一个Login(UserName,Password)的方法,Login可以在域控上进行认证。但这个方法必须在客户端自己做一个登陆窗体。
一次偶然的机会,我发现,如果在Webservice的IIS上设置了NT集成用户认证,那么在非域环境中登陆的时候,是会自动弹出一个登陆密码的框框的。其实这点我早就应该知道了,只是以前都是在网页中弹出的,没想到在C/S环境中也会自动弹出,根据这一个发现,我设计了一个简单的SSO登陆方式:
首先,实现一个Webservice,我选用的C#实现的,微软这点还是做得非常易用的。这个Service,只需要提供一个方法:
publicstringGetUserName(){returnUser.Identity.Isauthorized?User.Identity.Name:"";}
实现也很简单,就从当前认证的用户信息中获取用户的名字就可以了。
然后,发布这个服务,并在IIS中设置账户的安全信息是集成NT域控认证,同时取消匿名访问。
这样就可以,现在你只需要在你的应用中,在刚开始初始化的时候,调用一下这个WebServie,如果获取的账号名不为空,就表示账户已经在域控进行认证了。
关键是,这个方法可以让你在很多地方进行复用,使用也很简单。不过前提必须是网络应用。那种单机应用就不怎么适合了。
页: [1]
查看完整版本: C/S中利用域控进行SSO的简单实现方式