You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Credentials.Ui.CredentialPicker.PickAsync()重验证Windows用户后,下一步操作?

解决Windows凭据选择器的身份验证逻辑问题

你不需要自己实现凭据验证逻辑——当你在CredentialPickerOptions中指定AuthenticationProtocol.Negotiate时,Windows系统已经自动完成了身份验证流程,不会将明文凭据暴露给你的应用,完全符合“绝不直接处理用户凭据”的要求。

核心逻辑说明

CredentialPicker.PickAsync返回的CredentialPickerResults对象中,Status属性直接反映了身份验证的结果:

  • CredentialPickerStatus.Success:用户提供的凭据通过了Windows身份验证
  • CredentialPickerStatus.Canceled:用户取消了对话框
  • 其他状态(如Error):验证过程中出现错误

修改后的完整代码

using Windows.Security.Credentials.UI;
using System;
using System.Threading.Tasks;

internal class Program
{
    private static async Task Main(string[] args)
    {
        var result = await new CredentialsUiWrapper().AuthenticateUser();
        Console.WriteLine(result ? "验证成功" : "验证失败或取消");
    }
}

public class CredentialsUiWrapper
{ 
    public async Task<bool> AuthenticateUser(string message = "Verify your identity")
    {
        var credOptions = new CredentialPickerOptions
        {
            Message = message,
            Caption = "Windows Authentication",
            TargetName = Environment.MachineName,
            AuthenticationProtocol = AuthenticationProtocol.Negotiate,
            AlwaysDisplayDialog = true
        };

        try
        {
            CredentialPickerResults results = await CredentialPicker.PickAsync(credOptions);
            
            // 直接通过状态判断验证结果,无需手动处理凭据
            return results.Status == CredentialPickerStatus.Success;
        }
        catch (Exception)
        {
            return false;
        }
    }
}

关键注意事项

  • 不要尝试从CredentialPickerResults中提取CredentialUserName或CredentialPassword——当使用Negotiate协议时,这些值可能为空或不包含有效凭据,因为系统已经完成了验证,不会把敏感信息返回给应用。
  • TargetName指定为Environment.MachineName时,验证的是当前机器的本地用户;如果需要验证域用户,可以将TargetName设置为域名(如contoso.com)。
  • 若需要验证后模拟该用户执行操作,可以使用WindowsIdentity.Impersonate,但前提是验证成功(即Status为Success)。

内容的提问来源于stack exchange,提问作者Lemonade1947

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:23:23