当前位置: 首页 > 知识库问答 >
问题:

C Windows凭据提供程序错误屏幕

澹台权
2023-03-14

我已经为MFA开发了一个自定义凭证提供程序,它运行良好。我通过调用REST API在GetSerialization()方法中执行额外的身份验证检查。现在,如果通过REST API成功验证,我允许用户登录。但是对于验证失败的情况,我想显示错误屏幕,就像一个默认的提供者在用户名或密码不正确的情况下显示的那样(有一个“确定”按钮)。我已经了解,如果登录失败,默认情况下,这是在ReportResult()凭据提供程序中完成的。我可以调用ReportResult()以显示带有“确定”按钮的自定义错误消息吗?当做

编辑:我这样做:

if (SUCCEEDED(HRESULT_FROM_NT(ntsStatus)) && SUCCEEDED(HRESULT_FROM_NT(ntsSubstatus)))
{
    SHStrDupW(L"Bad password", ppwszOptionalStatusText);
    *pcpsiOptionalStatusIcon = CPSI_ERROR;
}

但屏幕并没有停止。它登录用户。我需要在windows凭据正确但API调用失败时检测场景,因此我需要捕获该状态并显示错误

共有2个答案

贺聪
2023-03-14
ReportResult(
    NTSTATUS ntsStatus, 
    NTSTATUS ntsSubstatus,
    PWSTR* ppwszOptionalStatusText, 
    CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
    )

您可以通过填充ppwszOptionalStatusText来设置自己的自定义消息。如果需要,还可以将图标设置为PCPSOptionalStatusIcon中的一个CPSI_错误CPSI_警告CPSI_成功

例如,在检查ntsStatus之后,您可以像这样进行定制

SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;

编辑:

GetSerialization()内部,一旦API返回失败,请将CREDENTIAL\u PROVIDER\u GET\u SERIALIZATION\u RESPONSE设置为not finished。这样地

*pcpgsr=CPGSR_RETURN_NO_CREDENTIAL_FINISHED;

这将停止登录以继续。

编辑2:按照下面的@js.hrt注释,通过使用*pcpgsr=CPGSR_NO_CREDENTIAL_NOT_FINISHED; SHStrDupW(L"坏密码", ppwszOptionalStatusText);*pcpsiOptionalStatusIcon=CPSI_ERROR;在GetSeriize()不使用报告结果显示状态屏幕。

轩辕瑞
2023-03-14

我得试试

*pcpgsr=CPGSR\u无\u凭证\u未完成

在我的用例中,额外的

*PCPSOptionalStatusIcon=CPSI_警告

显示状态信息就足够了。

 类似资料:
  • 问题内容: 我正在尝试启动并运行AngularJS 1.2 RC2应用程序。目前,我一直在使用Angular Seed项目来尝试使我的应用程序启动并运行。不幸的是,Angular Seed项目使用的是v1.0.7。在Angular Seed项目中,我将依赖项更新为以下内容: 在app.js中,我具有以下内容: 当我运行此应用程序时,出现以下错误: 我已经阅读了其他一些回答,例如1)注入’ngrou

  • 问题内容: 我试图通过遵循工厂方法文档中的示例来构建自己的服务。我认为我做错了,因为我继续遇到未知的提供程序错误。这是我的应用程序代码,包括声明,配置和工厂定义。 编辑我现在添加了所有文件以帮助解决问题 编辑该错误的完整详细信息在下面,问题似乎与getSettings有关,因为它正在寻找getSettingsProvider,但找不到它 这些是我目前在我的应用程序中拥有的所有文件 app.js 这

  • 问题内容: 我试图在angularjs应用程序中使用路由,如下所示: app.js controller.js index.html productList.html 当我运行此代码时,我在(谷歌浏览器的)控制台中收到以下错误: 我开始知道发生此错误,因为我在productsCtrl中使用。但是那我该怎么办?我该如何解决这个问题? 问题答案: $ element是不可注入的(它不是在Angular

  • 错误消息: System.InvalidOperationException:未找到具有固定名称“System.Data.SqlClient”得ADO.NET提供程序得实体框架提供程序.确保在应用程序配置文件的“Entity Framework”部分中注册了提供程序。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882。

  • 我无法让 在 EFCore 1.1 应用程序上运行。 下午 这是它给出的错误: Scaffold-DbContext:无法将参数绑定到参数“Path ”,因为它是空字符串。第1行:1 char:1 Scaffold-DbContext ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ category info:invalid data:(:)[Scaffold-db con

  • 我们有一个在windows server 2012上运行的自定义凭据提供程序,它在允许用户登录之前调用身份验证服务器的API。我们也在维护我们的凭证提供者的日志。 我们现在需要捕获并记录使用远程桌面连接登录服务器的用户的IP地址。是否可以从凭证提供者内部捕获IP地址?RDP客户端发送到服务器的序列化凭据包是否包含此信息?如果是,如何在凭据提供程序中访问它?