UserConsentVerifier 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
检查验证设备 ((例如 Microsoft Passport PIN、Windows Hello生物识别或指纹读取器) )的可用性,并执行验证。
public ref class UserConsentVerifier abstract sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class UserConsentVerifier final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public static class UserConsentVerifier
Public Class UserConsentVerifier
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
使用 C 的桌面应用#
对于桌面应用,你需要:而不是调用 UserConsentVerifier.RequestVerificationAsync 方法:
- 首先 (HWND) 检索窗口句柄 。 该主题包含 Windows UI 库 (WinUI) 3、Windows Presentation Foundation (WPF) 和 Windows 窗体 (WinForms) 的代码示例。 将该代码插入以下代码列表。
- 然后调用 Windows.Security.Credentials.UI.UserConsentVerifierInterop C# 互操作类的 RequestVerificationForWindowAsync 方法。 有关 C# 互操作类的详细信息,请参阅 从 .NET 应用调用互操作 API。 另请参阅 显示依赖于 CoreWindow 的 WinRT UI 对象。
private async System.Threading.Tasks.Task<string> RequestConsent(string userMessage)
{
string returnMessage;
// Retrieve the window handle of the current WinUI 3 window.
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
// Use the interop interface to request the logged on user's consent via device authentication
var consentResult = await Windows.Security.Credentials.UI.UserConsentVerifierInterop.RequestVerificationForWindowAsync(hwnd, userMessage);
switch (consentResult)
{
case Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified:
returnMessage = "User verified.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceBusy:
returnMessage = "Authentication device is busy.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceNotPresent:
returnMessage = "No authentication device found.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DisabledByPolicy:
returnMessage = "Authentication device verification is disabled by policy.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.NotConfiguredForUser:
returnMessage = "Please go to Account Settings to set up PIN or other advanced authentication.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.RetriesExhausted:
returnMessage = "There have been too many failed attempts. Device authentication canceled.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.Canceled:
returnMessage = "Device authentication canceled.";
break;
default:
returnMessage = "Authentication device is currently unavailable.";
break;
}
return returnMessage;
}
使用 C 通用 Windows 平台 (UWP) 应用#
此代码示例适用于 通用 Windows 平台 (UWP) 应用。 它显示指纹验证请求,然后返回描述结果的消息。 该代码调用适用于 UWP 应用的 UserConsentVerifier.RequestVerificationAsync 方法。
private async System.Threading.Tasks.Task<string> RequestConsent(string userMessage)
{
string returnMessage;
// Request the logged on user's consent via authentication device.
var consentResult = await Windows.Security.Credentials.UI.UserConsentVerifier.RequestVerificationAsync(userMessage);
switch (consentResult)
{
case Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified:
returnMessage = "User verified.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceBusy:
returnMessage = "Authentication device is busy.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceNotPresent:
returnMessage = "No authentication device found.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.DisabledByPolicy:
returnMessage = "Authentication device verification is disabled by policy.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.NotConfiguredForUser:
returnMessage = "Please go to Account Settings to set up PIN or other advanced authentication.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.RetriesExhausted:
returnMessage = "There have been too many failed attempts. Device authentication canceled.";
break;
case Windows.Security.Credentials.UI.UserConsentVerificationResult.Canceled:
returnMessage = "Device authentication canceled.";
break;
default:
returnMessage = "Authentication device is currently unavailable.";
break;
}
return returnMessage;
}
使用 C++/WinRT 的桌面应用
对于桌面应用,你需要:而不是调用 UserConsentVerifier.RequestVerificationAsync 方法:
- 首先获取将请求验证的窗口的句柄。 有关如何为 Windows UI 库 (WinUI) 3 执行此操作的详细信息,请参阅 检索 (HWND) 窗口句柄 。
- 获取 Windows.Security.Credentials.UI.UserConsentVerifier 对象的激活工厂。
- 调用 IUserConsentVerifierInterop 互操作接口的 RequestVerificationForWindowAsync 方法。
winrt::Windows::Foundation::IAsyncOperation<winrt::hstring> MainWindow::RequestConsent(winrt::hstring userMessage)
{
auto lifetime = get_strong();
winrt::hstring returnMessage;
// Retrieve the window handle of the current WinUI 3 window.
HWND hwnd;
winrt::check_hresult(m_inner->as<::IWindowNative>()->get_WindowHandle(&hwnd));
// Use the interop interface to request the logged on user's consent via device authentication
auto interop = winrt::get_activation_factory<winrt::Windows::Security::Credentials::UI::UserConsentVerifier, ::IUserConsentVerifierInterop>();
auto consentResult =
co_await winrt::capture<winrt::Windows::Foundation::IAsyncOperation<winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult>>(
interop, &::IUserConsentVerifierInterop::RequestVerificationForWindowAsync, hwnd, reinterpret_cast<HSTRING>(winrt::get_abi(userMessage))));
switch (consentResult)
{
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::Verified:
returnMessage = L"User verified.";
break;
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::DeviceBusy:
returnMessage = L"Authentication device is busy.";
break;
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::DeviceNotPresent:
returnMessage = L"No authentication device found.";
break;
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::DisabledByPolicy:
returnMessage = L"Authentication device verification is disabled by policy.";
break;
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::NotConfiguredForUser:
returnMessage = L"Please go to Account Settings to set up PIN or other advanced authentication.";
break;
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::RetriesExhausted:
returnMessage = L"There have been too many failed attempts. Device authentication canceled.";
break;
case winrt::Windows::Security::Credentials::UI::UserConsentVerificationResult::Canceled:
returnMessage = L"Device authentication canceled.";
break;
default:
returnMessage = L"Authentication device is currently unavailable.";
break;
}
co_return returnMessage;
}
注解
每当需要用户同意特定操作时,都可以使用 UserConsentVerifier 来增强应用的安全性,方法是包括验证请求。 例如,在授权应用内购买或访问受限资源之前,可能需要指纹身份验证。 可以使用 UserConsentVerifier 通过 CheckAvailabilityAsync 方法确定当前计算机是否支持指纹身份验证,然后使用 RequestVerificationAsync 方法通过指纹扫描请求用户同意。
方法
CheckAvailabilityAsync() |
检查身份验证设备(如 Microsoft Passport PIN、Windows Hello或指纹读取器)是否可用。 |
RequestVerificationAsync(String) |
使用身份验证设备(例如 Microsoft Passport PIN、Windows Hello或指纹读取器)执行验证。 此 API 适用于 通用 Windows 平台 (UWP) 应用。 UserConsentVerifier 类中的示例中介绍了用于桌面应用的替代 API。 |