0

我在网上搜索了一些更全面的解决方案。我的努力没有成功,所以我打电话寻求帮助。

问题:我有一个使用 Windows 集成身份验证的 .Net/C# WebApp。该应用程序是一个自定义表单应用程序,允许用户提交请求。然后将这些请求发送给主管和其他将审查和批准请求的各方。

出于审计目的,我必须让每个主管“签署”表格。简单的解决方案 - 使用活动的浏览器会话信息。用户单击“批准”按钮并将该信息记录到数据库中(ID 和日期/时间)。但审计人员不喜欢这种解决方案。他们认为这是不安全的。他们想要一个单独的凭据挑战,用户被迫输入 ID 和密码(并且很快会显示一个令牌/PIN 组合来代替 ID/密码)。

为了在此表单的 infopath 版本中满足这一点,我使用了 CredUIPromptForCredentials。该代码(尽管用 C# 编写)不直接移植到新的自定义 WebApplication。我做了一些挖掘,发现了一些关于更新的 CredUIPromptForWindowsCredentials 的资源:

如何显示 Windows 登录对话框?

在 C# 中为 windows Vista/7 显示身份验证对话框

如何在 C# .Net 3.5 SP1 Windows 安全自定义登录验证中显示身份验证对话框

这确实符合我正在努力实现的精神。只需对上述文章中的代码进行少量修改(并借鉴我旧 InfoPath 表单中的一些代码),我就能够获得一个可运行的提示和测试系统。

如果有人感兴趣,我很乐意分享现有代码,但它与上面引用的现有代码非常相似(几乎逐字)。唯一的区别是一个单独的 isAuthenticated 方法,它通过实例化 DirectoryEntry 对象并将该对象传递给 DirectorySearcher 对象来测试凭据是否有效,从而实际测试凭据。

但没有那么快。正如我所说,此代码有效,但仅当我在 Visual Studios 2012 中以调试模式运行时。如果我通过输入地址访问该站点并单击“签名”表单的按钮,该站点会旋转并且永远不会显示安全性对话。就好像(这只是我的猜测)允许 Windows 身份验证的 IIS 设置阻止了应用程序请求提示输入凭据。当我通过调试器运行站点时,情况并非如此。

一旦我克服了这个障碍,我实际上必须做一些进一步的测试,看看这段代码是否支持使用 PKI 卡进行身份验证。我猜它会因为 CredUI 将提示传递给 Windows 来处理。

所以这里有问题:1)当通过在Debug(localhost)中运行的IIS服务器VS调用该方法时,什么可能阻止弹出Windows安全窗口?

2) 有没有人有任何实现 CredUIPromptForWindowsCredentials 以使用 PKI 的经验?

2a) 如果是这样,CredUIPromptForWindowsCredentials 是否真的支持 PKI 而无需任何附加代码(假设 Windows 工作站配置了所有硬件、驱动程序和中间件)?

提前感谢您提供的任何见解。

菲尔·S。

4

1 回答 1

0

看看你的问题,作为一个老审计员,我可以推荐绕道来满足你的审计团队吗?PKI 并不是最安全的东西……

1) 提供正常的登录/密码表格,没有任何特殊说明或凭据(可能“即时”被欺诈或被盗)。最好在此页面中使用 HTTPS。

2)一旦该人通知数据,使用 SMS(即时消息)通过 2 因素身份验证。成本真的无关紧要(请参阅 Twilio 以获得一些想法)。显然,除了他的登录名/密码之外,每个人都必须在数据库中拥有他的手机。

3)这样你可以确保主管真的是批准/签署页面的人。

这是更安全的模式,因此,Facebook、Google Mail 和其他公司都在使用这种方法。

抱歉,我知道我没有按您的需要回答您,但它比您的建议更安全。祝你好运!

于 2015-09-19T02:26:21.423 回答