我在网上搜索了一些更全面的解决方案。我的努力没有成功,所以我打电话寻求帮助。
问题:我有一个使用 Windows 集成身份验证的 .Net/C# WebApp。该应用程序是一个自定义表单应用程序,允许用户提交请求。然后将这些请求发送给主管和其他将审查和批准请求的各方。
出于审计目的,我必须让每个主管“签署”表格。简单的解决方案 - 使用活动的浏览器会话信息。用户单击“批准”按钮并将该信息记录到数据库中(ID 和日期/时间)。但审计人员不喜欢这种解决方案。他们认为这是不安全的。他们想要一个单独的凭据挑战,用户被迫输入 ID 和密码(并且很快会显示一个令牌/PIN 组合来代替 ID/密码)。
为了在此表单的 infopath 版本中满足这一点,我使用了 CredUIPromptForCredentials。该代码(尽管用 C# 编写)不直接移植到新的自定义 WebApplication。我做了一些挖掘,发现了一些关于更新的 CredUIPromptForWindowsCredentials 的资源:
在 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。