use*_*827 13 c# security wpf impersonation
在我的WPF应用程序中,我希望允许管理员使用集成安全性为各种其他用户测试数据库连接.所以我有一个表单,允许管理员输入域名,用户名和密码,然后测试它.我能够安全地处理密码,直到我打电话LogonUser给advapi32.dll它需要一个string password
LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Run Code Online (Sandbox Code Playgroud)
我编写了一个实用程序函数,它将SecureString转换为尽可能安全的字符串,然后在LogonUser调用中将其调用密码:
LogonUser(UserName, Domain, Helper.ConvertSafely(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Run Code Online (Sandbox Code Playgroud)
由于LogonUser的签名采用字符串,除非LogonUser在执行时正确地处理密码,否则在调用返回后它仍然可以在我的调用堆栈中以纯文本形式存在.是否有一种更安全的方式来冒充用户,在这种情况下,我可以确信PW一直是安全的?
基本上我只需要一个WindowsImpersonationContext但是我想在没有密码的情况下以纯文本形式获取它.
如果您要模拟的用户已经登录到计算机上(例如在另一个会话中),则答案如下:Windows 服务是否可以模拟没有密码的用户?
如果不是,您必须向 LogonUser 提供密码。此密码必须至少在内存中保留一小段时间,因为这就是定义 LogonUser 的方式。请注意,并非所有身份验证包都需要密码(例如生物识别或智能卡:Windows 身份验证概述)。
因此,如果您确实想要模拟,则必须在某个地方传递密码。在这种情况下,请确保您使用 Microsoft 的 postlagerkarte 代码:Marshal.SecureStringToGlobalAllocUnicode 方法示例代码
你真的不能做更多的事情。
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |