问题标签 [credui]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - DefaultNetworkCredentials 具有空值。需要提示用户...如何?
在某些情况下,我使用 SharePoint Web 服务的桌面应用程序最终会出现具有空值的 DefaultNetworkCredentials,因此调用失败。然后我需要获取用户凭据,但我还没有找到一种直接的方法。
我正在考虑实施http://www.pinvoke.net/default.aspx/credui/CredUIPromptForCredentialsW.html中概述的解决方案
...但是,这仍然需要我处理密码,我真的不想这样做。我看过了,但还没有找到更直接的方法来提示用户并直接返回 NetworkCredential,而无需存储密码?
谢谢,
编辑:看起来我不会确切地找到我正在寻找的东西......当这种情况发生时,我必须自己提示用户。
但是,如果我正确解释了其中一些答案,则 DefaultNetworkCredentials 首先可能是这样的错误情况。是这样吗?有没有办法强制填充 DefaultNetworkCredentials,或者它真的是一个简单的缓存,它只是记住用于目标 URI 的最后一个域/用户 ID/密码(那天?那个应用程序/会话?)。
windows - Win32:CredUIConfirmCredentials 行为异常
我将CredUIConfirmCredentials与 CredUIPromptForCredentials结合使用。
我设置了, 并且当用户首次提供EXPECT_CONFIRMATION
凭据时,调用返回NO_ERROR按预期。CredUIConfirmCredentials
CredUIConfirmCredentials
但是,在使用相同凭据的所有后续调用中,将返回ERROR_INVALID_PARAMETER。SDK 文档将其描述为:
尝试确认等待的凭据失败,因为凭据包含无效或不一致的数据。
这相当令人困惑,因为它们与最初成功保存的凭据完全相同。
如果您为相同的用户名输入不同的密码,则会返回相同的结果。更令人困惑的是,新凭据实际上是持久化的——这似乎表明返回值实际上表明持久化的凭据被覆盖了——而不是存在错误。我错过了什么,还是文档不正确?
背景
您可以使用 Window 的凭据系统来存储您自己的应用程序的凭据。您告诉 Windows 您要提示某些“目标”的“通用”凭据:
伪代码:
然后将导致 Windows 显示一个对话框:
然后,您的工作就是检查用户输入的凭据。如果它们有效,则通过调用ConfirmCredentials告诉 Windows 。这是为了确保只保存有效的凭据:
一旦凭据被确认为有效,Windows 会将它们保存在安全存储中,您可以通过控制面板查看:
关键词:credui, CredUIConfirmCredentials
delphi - CredWrite 返回 Win32 错误代码 2 (ERROR_INVALID_FUNCTION)“函数不正确”。
我正在尝试调用CredWrite,但它正在返回ERROR_INVALID_FUNCTION。我可以调用CredRead从密码存储中获取凭据,并且可以使用CredUIPromptForCredentials存储新凭据。
但我无法弄清楚如何让 CredWrite 工作。
我正在使用的代码是:
GetLastError 返回 1 ( ERROR_INVALID_FUNCTION
)
这个函数不正确吗?它甚至没有返回ERROR_INVALID_PARAMETER
,它返回“不正确的功能”。什么是不正确的?
有没有调用 CredWrite 的示例代码?
笔记
- 我试过调用 Ansi 版本(CredWriteA),结果相同
- 我试过使用
CRED_PERSIST_SESSION
andCRED_PERSIST_LOCAL_MACHINE
,除了CRED_PERSIST_ENTERPRISE
c# - .Net WebApp:创建表单签名类/方法
我在网上搜索了一些更全面的解决方案。我的努力没有成功,所以我打电话寻求帮助。
问题:我有一个使用 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。
c++ - Windows 8 凭据提供程序域用户
我在尝试让域用户向我的自定义凭据提供程序进行身份验证时遇到问题。从 Microsoft 示例中,有一个_fIsLocalUser
已签入的变量CSampleCredential::GetSerialization
。在大多数情况下,这通常是正确的;但是,如果连接到域并使用磁Other User
贴,那么我会得到The parameter is incorrect
. 当凭证被序列化时,似乎甚至<Domain>\<Username>
不接受建议的格式。如果可能的话,我也想支持<Username>@<UPN>
。
我不确定这种方法是否是问题,但是这里是文档https://msdn.microsoft.com/en-us/library/windows/desktop/aa374802(v=vs.85).aspx
谢谢
java - JNA Java CredUIPromptForWindowsCredentialsW
我正在尝试将此函数转换为 JNA:
并致电:
我试图声明pUiInfo
为or CredUIPromptForWindowsCredentialsW
。Pointer
PointerByReference
函数CredUIPromptForWindowsCredentialsW
返回代码 160(“错误参数)。怎么了?
c# - 如何在使用 CredUIPromptForCredentials 时以其他用户身份运行该进程
我确实找到了这一点,但如果返回码为 NO ERROR,我无法弄清楚如何以该用户身份运行该进程
如何使用它以其他用户身份运行该进程?我必须使用CredUIPromptForCredentials来请求 Windows 凭据。所以我认为我不能将这些值传递给以下代码。