电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

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


发布日期:2024/5/20
 

我先简单的介绍一下我的需求我希望我做的软件中可以与域控集成实现单点登录且不需要额外输入帐号秘密当然这是在已经登陆到域的前提下

为此我翻过很多资料Windows 确实提供了 API 来操作登录但小弟比较愚笨一直感觉这些 API 使用起来很笨拙且根据系统需求往往进行域控帐号认证都是在服务器上进行的因为你的机器可能不能访问到我的域控服务器对于一般的 IT 服务器部署域控服务器都是在一个安全区域里面的

在此之前我已经实现了一个WebService 提供了一个 Login(UserName Password) 的方法 Login 可以在域控上进行认证但这个方法必须在客户端自己做一个登陆窗体

一次偶然的机会我发现如果在Webservice 的 IIS 上设置了 NT 集成用户认证那么在非域环境中登陆的时候是会自动弹出一个登陆密码的框框的其实这点我早就应该知道了只是以前都是在网页中弹出的没想到在 C/S 环境中也会自动弹出根据这一个发现我设计了一个简单的 SSO 登陆方式

首先实现一个Webservice 我选用的 C# 实现的微软这点还是做得非常易用的这个 Service 只需要提供一个方法

public string GetUserName() { return UserIdentityIsauthorized?UserIdentityName }

实现也很简单就从当前认证的用户信息中获取用户的名字就可以了

然后发布这个服务并在IIS 中设置账户的安全信息是集成 NT 域控认证同时取消匿名访问

这样就可以现在你只需要在你的应用中在刚开始初始化的时候调用一下这个WebServie 如果获取的账号名不为空就表示账户已经在域控进行认证了

关键是这个方法可以让你在很多地方进行复用使用也很简单不过前提必须是网络应用那种单机应用就不怎么适合了

上一篇:Datatbel和string之间的相互转换

下一篇:高手进阶:给WINDOWS服务加上描述