C++ Windows 凭据提供程序错误屏幕
C++ Windows Credential Provider Error Screen
我已经为 MFA 开发了一个自定义凭证提供程序,它运行良好。我正在通过调用 REST APIs 在 GetSerialization() 方法中执行额外的身份验证检查。现在,如果通过 REST API 成功验证,我将允许用户登录。但是对于验证失败的情况,我想显示错误屏幕,就像一个默认提供程序在用户名或密码不正确时显示的那样(有一个 'Ok' 按钮)。我知道这是在登录失败的情况下默认凭据提供程序在 ReportResult() 中完成的。我可以调用 ReportResult() 以使用 'Ok' 按钮显示我的自定义错误消息吗?
此致,
编辑:我是这样做的:
if (SUCCEEDED(HRESULT_FROM_NT(ntsStatus)) && SUCCEEDED(HRESULT_FROM_NT(ntsSubstatus)))
{
SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;
}
但是屏幕没有停止。它登录用户。我需要检测 windows 凭据正确但 API 调用失败的情况,因此我需要捕获该状态并显示错误
ReportResult(
NTSTATUS ntsStatus,
NTSTATUS ntsSubstatus,
PWSTR* ppwszOptionalStatusText,
CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
)
您可以通过填充 ppwszOptionalStatusText
来设置您自己的自定义消息。如果需要,也可以将图标 pcpsiOptionalStatusIcon
设置为 CPSI_ERROR
、CPSI_WARNING
或 CPSI_SUCCESS
之一。
例如,勾选 ntsStatus
后,您可以像这样自定义
SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;
编辑:
里面GetSerialization()
,一旦APIreturns失败,设置CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE
未完成。像这样
*pcpgsr = CPGSR_RETURN_NO_CREDENTIAL_FINISHED;
这应该会停止登录以继续。
编辑 2:
根据下面的@js.hrt 评论,要显示来自 GetSerialization 的状态屏幕,请使用 *pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED; SHStrDupW(L"Bad password", ppwszOptionalStatusText); *pcpsiOptionalStatusIcon = CPSI_ERROR;在 GetSerialization() 中而不使用报告结果。
一定要试试
*pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED;
在我的用例中有额外的
*pcpsiOptionalStatusIcon = CPSI_WARNING;
显示状态信息就够了。
我已经为 MFA 开发了一个自定义凭证提供程序,它运行良好。我正在通过调用 REST APIs 在 GetSerialization() 方法中执行额外的身份验证检查。现在,如果通过 REST API 成功验证,我将允许用户登录。但是对于验证失败的情况,我想显示错误屏幕,就像一个默认提供程序在用户名或密码不正确时显示的那样(有一个 'Ok' 按钮)。我知道这是在登录失败的情况下默认凭据提供程序在 ReportResult() 中完成的。我可以调用 ReportResult() 以使用 'Ok' 按钮显示我的自定义错误消息吗? 此致,
编辑:我是这样做的:
if (SUCCEEDED(HRESULT_FROM_NT(ntsStatus)) && SUCCEEDED(HRESULT_FROM_NT(ntsSubstatus)))
{
SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;
}
但是屏幕没有停止。它登录用户。我需要检测 windows 凭据正确但 API 调用失败的情况,因此我需要捕获该状态并显示错误
ReportResult(
NTSTATUS ntsStatus,
NTSTATUS ntsSubstatus,
PWSTR* ppwszOptionalStatusText,
CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
)
您可以通过填充 ppwszOptionalStatusText
来设置您自己的自定义消息。如果需要,也可以将图标 pcpsiOptionalStatusIcon
设置为 CPSI_ERROR
、CPSI_WARNING
或 CPSI_SUCCESS
之一。
例如,勾选 ntsStatus
后,您可以像这样自定义
SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;
编辑:
里面GetSerialization()
,一旦APIreturns失败,设置CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE
未完成。像这样
*pcpgsr = CPGSR_RETURN_NO_CREDENTIAL_FINISHED;
这应该会停止登录以继续。
编辑 2: 根据下面的@js.hrt 评论,要显示来自 GetSerialization 的状态屏幕,请使用 *pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED; SHStrDupW(L"Bad password", ppwszOptionalStatusText); *pcpsiOptionalStatusIcon = CPSI_ERROR;在 GetSerialization() 中而不使用报告结果。
一定要试试
*pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED;
在我的用例中有额外的
*pcpsiOptionalStatusIcon = CPSI_WARNING;
显示状态信息就够了。