在Windows登录屏幕上运行自助服务c# Winform
本文关键字:服务 Winform 运行 Windows 登录 屏幕 | 更新日期: 2023-09-27 18:13:57
我为公司内部用户编写了一个c# Winform自助服务密码重置工具。
此应用程序使用HTTPS和基于客户端证书的身份验证来消耗其他自定义Asp.net web服务,以生成随机的6位数代码并发送到移动设备,或检索用户在注册Self Service时设置的3个安全问题。
代码/答案被发送回web服务,如果验证,则解锁用户的AD帐户并重置其密码服务器端。
我认为这在任何SSPR工具中都很常见,如果从另一个用户的机器访问,都可以正常工作,但是…
由于问题的本质是用户在需要重置密码时无法访问他们的机器,我被问到是否可以从Windows登录屏幕启动这个应用程序。
我写了一个POC自定义凭证提供程序,它在windows 7登录屏幕上添加了一个新的"tile",并在点击时启动我的应用程序,但我忍不住认为这可能是一个非常糟糕的主意。
因为它是从哪里启动的,应用程序运行在本地系统用户的上下文中,这已经让我很紧张!
看看其他"付费"的SSPR工具,从表面上看,它们似乎在做类似的事情,即在登录屏幕上运行外部应用程序?在winlogin屏幕上运行任何应用程序作为SYSTEM是完全不允许的吗?
如果没有,他们有什么建议我应该遵循,以填补任何漏洞?
我还能做些什么来降低风险吗(在我的程序第一次运行时进行某种模拟/降级?)
在windows证书提供程序上,您可以让它登录,然后启动您的自助服务应用程序。我们尝试过这个过程本身需要很长时间。
我们做了下面的
创建了一个Web应用程序,允许您注册自助服务。要么提问回答,要么注册一个备用电子邮件地址。这些都是微不足道的东西。
有趣的是,我们创建了一个Winform应用程序,其中包含一个仅针对该url的浏览器组件。然后,我们创建了一个凭据提供程序,它有一个链接,当点击该链接时将打开winform应用程序。我们确保没有右键单击或通过配置winform启动新窗口的能力。
现在如果用户忘记了他们的密码,他们只需在登录前点击链接。Winform加载,他们做他们的业务。然后关闭Winform。这都是在登录屏幕时完成的。
。如果您尝试使用wpf而不是Winforms来实现,则应用程序需要相当长的时间来加载。
乐于分享代码。告诉我你需要什么。另外,在创建凭据提供程序时,请确保为它们提供唯一的id,而不是只使用Microsoft示例。您还需要禁用原始凭据提供程序,否则您最终会得到副本。我们使用组策略来相应地禁用。