我为MFA开发了一个自定义凭据提供程序,它运行正常 . 我通过调用REST API在GetSerialization()方法中执行其他身份验证检查 . 现在,如果通过REST API成功验证,我允许用户登录 . 但是对于验证失败的情况,我想显示错误屏幕,就像一个默认提供程序显示的用户名或密码不正确(有一个'Ok'按钮) . 我已经理解,在登录失败的情况下,默认凭据提供程序在ReportResult()中完成此操作 . 我可以调用ReportResult()来显示带有“确定”按钮的自定义错误消息吗?问候,
编辑:我这样做:
if (SUCCEEDED(HRESULT_FROM_NT(ntsStatus)) && SUCCEEDED(HRESULT_FROM_NT(ntsSubstatus)))
{
SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;
}
但屏幕没有停止 . 它登录用户 . 我需要在Windows凭据正确但API调用失败时检测方案,因此我需要捕获该状态并显示错误
2 回答
您可以通过填充
ppwszOptionalStatusText
来设置自己的自定义消息 . 如果需要,也可以将图标pcpsiOptionalStatusIcon
设置为CPSI_ERROR
,CPSI_WARNING
或CPSI_SUCCESS
之一 .例如,在检查
ntsStatus
之后,您可以像这样自定义编辑:
在
GetSerialization()
内部,一旦API返回失败,将CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE
设置为未完成 . 像这样*pcpgsr = CPGSR_RETURN_NO_CREDENTIAL_FINISHED;
这应该会停止登录以继续 .
编辑2:根据下面的@js.hrt评论,通过使用* pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED来显示来自GetSerialization的状态屏幕; SHStrDupW(L“Bad password”,ppwszOptionalStatusText); * pcpsiOptionalStatusIcon = CPSI_ERROR;在GetSerialization()中不使用报告结果 .
不得不试试
*pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED;
在我的用例中另外
*pcpsiOptionalStatusIcon = CPSI_WARNING;
它足以显示状态消息 .