如何为创建调用我的应用程序的进程的用户获取访问令牌?
我需要使用该令牌进行模拟,其目的是访问该用户applicationData中的文件。
P.S。将模拟用户的应用程序是在System。
下运行的服务答案 0 :(得分:3)
检查MSDN,所有这些API都有详细记录。 你可能想做这样的事情:
HANDLE thisToken, thisProcess;
thisProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() );
OpenProcessToken( thisProcess, TOKEN_ALL_ACCESS, &thisToken );
http://msdn.microsoft.com/en-us/library/aa379295(v=vs.85).aspx
虽然您可能希望获得更少的访问权限。 这将为您提供当前流程的令牌。
答案 1 :(得分:1)
出于安全原因,我们一直在寻找一种方法来查看用户的访问令牌。
我们最近遇到的情况是,我们需要了解其中一名员工是否可以修改对共享文件服务器上的某个文件的访问权限。我们最初尝试查看文件的ACL,但是在所有嵌套成员资格到位的情况下,这种方法很快变得不切实际。
然后我们的一个开发人员建议尝试查看用户的访问令牌,并将其与文件上的ACL进行比较,因为这是一个相当简单的过程,可以立即产生准确的结果。
因此,我们开始寻找一种方法来查看用户的访问令牌。最初我们找不到多少。遇到了一些开发人员讨论如何获取用户令牌的网站,以及一些建议使用微软的“whoami”的网站,但这也没有帮助,因为它只能用于查看自己的令牌。
几乎放弃了,有一天我只是用谷歌搜索“Windows Access令牌查看器”,并惊讶地发现一个名为Gold Finger for AD的工具,在其他一些安全分析功能中,有一个称为“访问令牌查看器”的功能”。
被发现激动,把手放在一个eval上,然后试了一下。它按照声明工作,让我们看到任何用户的访问令牌,特别是我们感兴趣的员工的访问令牌。我只希望它也提供API格式的相同功能,所以我们的开发人员可以将它用于我们的内部应用程序。
尽管如此,它符合我们的目的。技术细节已经过了 - Windows Access Token Viewer。
答案 2 :(得分:0)
您可以使用wcf在客户端和服务之间进行通信。 “Delegation and Impersonation with WCF”
中有解释和示例答案 3 :(得分:0)
如果您的应用程序是服务,那么很可能是通过COM或DCOM调用的。
您的服务器需要执行CoGetCallContext来检索IServerSecurity接口,该接口允许它检查客户端的身份验证并在需要时模拟客户端。
有关更多信息,请参见http://www.drdobbs.com/examining-dcom-security/184416352
(是的,我知道这是一个令人难以置信的老问题……但是,认真的说,有人应该在现在之前就已经弄清楚了。)