C/S中利用域控进行SSO的简单实现方式
2012-04-09 20:36
573 查看
我先简单的介绍一下我的需求。我希望我做的软件中,可以与域控集成,实现单点登录,且不需要额外输入帐号秘密。当然这是在已经登陆到域的前提下。
为此我翻过很多资料。Windows 确实提供了 API 来操作登录。但小弟比较愚笨,一直感觉这些 API 使用起来很笨拙。且根据系统需求,往往进行域控帐号认证,都是在服务器上进行的。因为你的机器可能不能访问到我的域控服务器。对于一般的 IT 服务器部署,域控服务器都是在一个安全区域里面的。
在此之前,我已经实现了一个WebService ,提供了一个 Login(UserName, Password) 的方法, Login 可以在域控上进行认证。但这个方法必须在客户端自己做一个登陆窗体。
一次偶然的机会,我发现,如果在Webservice 的 IIS 上设置了 NT 集成用户认证,那么在非域环境中登陆的时候,是会自动弹出一个登陆密码的框框的。其实这点我早就应该知道了,只是以前都是在网页中弹出的,没想到在 C/S 环境中也会自动弹出,根据这一个发现,我设计了一个简单的 SSO 登陆方式:
首先,实现一个Webservice ,我选用的 C# 实现的,微软这点还是做得非常易用的。这个 Service ,只需要提供一个方法:
public string GetUserName() { return User.Identity.Isauthorized?User.Identity.Name:""; }
实现也很简单,就从当前认证的用户信息中获取用户的名字就可以了。
然后,发布这个服务,并在IIS 中设置账户的安全信息是集成 NT 域控认证,同时取消匿名访问。
这样就可以,现在你只需要在你的应用中,在刚开始初始化的时候,调用一下这个WebServie, 如果获取的账号名不为空,就表示账户已经在域控进行认证了。
关键是,这个方法可以让你在很多地方进行复用,使用也很简单。不过前提必须是网络应用。那种单机应用就不怎么适合了。
为此我翻过很多资料。Windows 确实提供了 API 来操作登录。但小弟比较愚笨,一直感觉这些 API 使用起来很笨拙。且根据系统需求,往往进行域控帐号认证,都是在服务器上进行的。因为你的机器可能不能访问到我的域控服务器。对于一般的 IT 服务器部署,域控服务器都是在一个安全区域里面的。
在此之前,我已经实现了一个WebService ,提供了一个 Login(UserName, Password) 的方法, Login 可以在域控上进行认证。但这个方法必须在客户端自己做一个登陆窗体。
一次偶然的机会,我发现,如果在Webservice 的 IIS 上设置了 NT 集成用户认证,那么在非域环境中登陆的时候,是会自动弹出一个登陆密码的框框的。其实这点我早就应该知道了,只是以前都是在网页中弹出的,没想到在 C/S 环境中也会自动弹出,根据这一个发现,我设计了一个简单的 SSO 登陆方式:
首先,实现一个Webservice ,我选用的 C# 实现的,微软这点还是做得非常易用的。这个 Service ,只需要提供一个方法:
public string GetUserName() { return User.Identity.Isauthorized?User.Identity.Name:""; }
实现也很简单,就从当前认证的用户信息中获取用户的名字就可以了。
然后,发布这个服务,并在IIS 中设置账户的安全信息是集成 NT 域控认证,同时取消匿名访问。
这样就可以,现在你只需要在你的应用中,在刚开始初始化的时候,调用一下这个WebServie, 如果获取的账号名不为空,就表示账户已经在域控进行认证了。
关键是,这个方法可以让你在很多地方进行复用,使用也很简单。不过前提必须是网络应用。那种单机应用就不怎么适合了。
相关文章推荐
- C/S中利用域控进行SSO的简单实现方式
- C/S中利用域控进行SSO的简单实现方式
- C/S中利用域控进行SSO的简单实现方式
- java web项目利用Filter进行单点登录的简单实现
- Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式2
- Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式1
- 关于上报错误最简单的实现方式--利用图片
- 一个简单的利用ini配置文件以及用户输入的交互进行文件夹内容拷贝的批处理文件脚本的实现
- 利用keras中image.ImageDataGenerator.flow_from_directory()实现从文件夹中提取图片和进行简单归一化处理
- 利用数组模拟栈实现简单的表达式中缀转后缀并进行计算
- 利用hadoop命令rcc生成Record 一种简单的方式实现自定义的writable对象
- JFinal 如何进行XSS过滤(JFinal 的简单介绍到利用JFinal 的handler实现)
- 采用JSP+JavaBean的方式进行简单的实现用户的网页登陆实例
- 采用JSP+JavaBean的方式进行简单的实现用户的网页登陆实例
- 【远程调用框架】如何实现一个简单的RPC框架(三)优化一:利用动态代理改变用户服务调用方式
- java web项目利用Filter进行单点登录的简单实现(解决方案)
- 利用PreLoader实现一个平视显示(HUD)效果(可以运用到加载等待效果),并进行简单的讲解
- 利用PreLoader实现一个平视显示(HUD)效果(可以运用到加载等待效果),并进行简单的讲解
- 简单的实现了利用plist进行大图分割小图
- 一种新的杀毒方式----利用Windows PE的文件共享进行杀毒