簡體   English   中英

C ++ Windows憑據提供程序錯誤屏幕

[英]C++ Windows Credential Provider Error Screen

我已經為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調用失敗的情況,因此我需要捕獲該狀態並顯示錯誤

ReportResult(
    NTSTATUS ntsStatus, 
    NTSTATUS ntsSubstatus,
    PWSTR* ppwszOptionalStatusText, 
    CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
    )

您可以通過填充ppwszOptionalStatusText來設置自己的自定義消息。 如果需要,還可以將圖標pcpsiOptionalStatusIcon設置為CPSI_ERRORCPSI_WARNINGCPSI_SUCCESS

例如,在檢查ntsStatus ,您可以像這樣自定義

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

編輯:

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;

足以顯示狀態消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM