wpf 如何让用户输入windows凭据并验证它们,而不处理明文凭据?

rhfm7lfc  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(109)

bounty还有7天到期。回答此问题可获得+100声望奖励。Rand Random正在寻找最新答案这个问题:答案不会阻止密码写入应用程序的内存

我需要我的用户在我的应用程序中输入他们的windows用户名和密码,并验证凭据是否正确,因为用户在我的应用程序中应该具有的角色Map到windows用户名。
(背景:这是一个运行在工业机器上的应用程序,实际登录到windows的用户是通用机器用户,用户登录的和on是不可行的)。因此,我不能只查询当前登录的用户,并从那里去-用户在我的软件需要改变在生命周期的windows登录会话)。
微软的建议here
处理凭据的一般方法是避免使用凭据,而是依赖其他方式进行身份验证,例如证书或Windows身份验证。
我尽量避免自己处理用户的密码。
所以我尝试使用creduipromptforwindowscredentialsw,虽然它为我提供了一个登录窗口,而无需我处理凭据,但似乎它不验证凭据,我可以输入任何内容。
有没有一种方法来提示用户他们的windows登录,只是得到用户名,域和“密码是正确的”?而不处理我的应用程序中的密码?
编辑以澄清:我不想也不需要模仿。代码可以作为机器用户运行,这很好。我只想让用户输入凭据,并获得反馈,如果凭据有效和用户名是什么。这样,我的应用程序就可以授予对某些只能由该用户访问的功能的访问权限。
如果我自己处理密码,我的方法是使用DirectoryService来针对LDAP进行身份验证,然后就完成了。但如果可能的话,我想避免在我的应用程序中使用明文密码。

zvokhttg

zvokhttg1#

我会尝试通过模拟用户来以特定用户的身份运行任何代码。
以下是第一个答案:Run Code as a different user我将执行以下操作

static void Main(string[] args)
{
    var credentials = new UserCredentials("xxx", "yyy", "zzz");

    try
    {   
        using (var xyz = credentials.LogonUser(LogonType.Network))
        {
            // do whatever you want as this user.
            Console.WriteLine("Success");
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Fail");
    }
}

字符串
注意:代码看起来与链接问题中提供的不同,因为使用的API被标记为过时,你应该像我一样编写它
代码使用nuget包:https://www.nuget.org/packages/SimpleImpersonation
似乎在我这边行得通:


的数据

相关问题