失败后停止自动登录 - 自定义凭据提供程序 Windows

Posted

技术标签:

【中文标题】失败后停止自动登录 - 自定义凭据提供程序 Windows【英文标题】:Stop Auto Logon after failure - Custom Credential Provider Windows 【发布时间】:2017-09-22 08:54:30 【问题描述】:

我已经在凭据提供程序上使用了 Widows 示例,并使用它们作为参考构建了一个示例。我可以通过手动提供用户名和密码无缝登录。我已经设置了

CustomCredential::SetSelected (__out BOOL* pbAutoLogon) 
    *pbAutoLogon = TRUE; // FALSE;
     return S_OK;

Now, AutoLogon, when the Tile is selected, is happening seamlessly.

作为一个测试用例,我更改了密码,正如预期的那样登录失败。失败后,出现一条错误消息,当我单击“确定”(这是唯一的选项)时,重新提交凭据以进行重试。我们如何才能阻止这种行为?认证失败后调用哪个方法?

我已经处理了ReportResult(),但这并没有帮助。

提前致谢。

【问题讨论】:

【参考方案1】:

已经有一段时间了 - 但我相信调用 GetSerialization() 以将序列化的凭据返回给 LogonUI。您还需要实现这一点。我认为凭据提供程序示例具有 KERB_INTERACTIVE_UNLOCK_LOGON 的工作代码。

您还可以在 SetSelected() 中有条件地更改 *pbAutoLogon - 我会根据某些结果在凭据提供程序中执行此操作。

ReportResult() 将在 GetSerialization 将其结果返回给 LogonUI 后调用。在 ReportResult() 中,您可以执行诸如清除密码框之类的操作(在示例代码中完成。)

如果您没有在 GetSerialization 中返回序列化凭据,那么我认为您可能会遇到您在原始帖子中列出的那种错误。在凭证示例中,在 GetSerialization() 中调用了 KerbInteractiveUnlockLogonPack(),这就是有效地“登录”用户的内容。

这个错误似乎是特定的 - “用户没有被授予请求的登录类型”,所以它可能与您正在测试的用户的权限有关。

如果您使用远程桌面,请确保您的用户是能够登录的正确组的成员 (https://support.jumpdesktop.com/hc/en-us/articles/216424183-General-RDP-You-must-be-granted-the-Allow-log-on-through-the-Terminal-or-Remote-Desktop-Services-Right-),或者如果它是允许交互式登录的普通用户。

另外 - SetSelected() 在您的凭据提供程序被单击时被调用 - 我不确定它是否在每次登录尝试后被调用(我的猜测是它没有。)在我的凭据提供程序中,我是使用我使用 SetSelected() 显示的自定义登录对话框。

【讨论】:

感谢@jonathan 的帮助。如果提供的凭据不正确或无法登录,我想查找什么,我们在哪里找到它?有条件地处理 *pbAutoLogon 是前进的方向,但我们怎么知道它失败了?是只有 reportResult() 方法可以告诉还是其他? 你运气好吗?本周我一直在重写我的凭据提供程序 - 这是 Windows 安全性的重要组成部分,我对 Microsoft 为开发人员提供的少量资源感到失望。 还没有运气。我们正在编写一些解决方法,但它们似乎没有用。如果我们遇到任何可靠的事情,我会继续发帖。如果您想出办法,请告诉我们。

以上是关于失败后停止自动登录 - 自定义凭据提供程序 Windows的主要内容,如果未能解决你的问题,请参考以下文章

自定义凭据提供程序未加载

登录时未通过凭据提供程序加载 KSP(密钥存储提供程序)

自定义凭据提供程序

win8中的凭据提供程序

IIS 应用程序池登录凭据停止 .net Core

NextAuth 与自定义凭据提供程序不创建会话