【问题标题】:How to get certain domain user's access token?如何获取特定域用户的访问令牌?
【发布时间】:2012-06-09 15:06:26
【问题描述】:

我是 Active Directory 域管理员,如何获取特定域用户的访问令牌?我想使用这个用户的访问令牌从只对他开放的共享文件夹中获取一些数据。

【问题讨论】:

    标签: c++ active-directory dns access-token


    【解决方案1】:

    如果用户已登录并且您想使用他的令牌模拟他,那么过程是:

    1. 使用WTSEnumerateSessions 循环列出系统的所有活动用户。

    2. 比较使用PWTS_SESSION_INFO 信息,如果用户是你想要的。

    3. 如果用户匹配,则使用WTSQueryUserToken 获取用户的令牌。此 Api 需要会话 ID,您将在调用 WTSEnumerateSessions 时从步骤 1 中获得的 PWTS_SESSION_INFO 结构获得会话 ID

    4. 使用 DuplicateTokenEx 复制令牌,然后使用 ImpersonateLoggedOnUser 模拟该用户。

    5. 复制文件等完成工作

    6. RevertToself.

    Example click here

    如果用户未登录,而您想冒充并使用他的凭据完成工作,则:

    1. 使用LogonUser API 获取令牌并从上述选项的第 4 步开始。

    【讨论】:

    • 我有一些问题.. WTSEnumerateSessions 似乎用于检索活动用户会话。但是我怎么能确定域用户正在访问这个共享文件夹呢?另外这个方法没有使用我的域管理员权限,没有它是否可以获得域用户的访问令牌?
    • 您应该是机器上的管理员才能执行管理任务。 WTS 服务 API 提供登录到机器的用户的令牌。如果用户未登录,那么您可以获得以该管理员用户身份运行的进程的令牌。然后复制令牌并使用它。如果用户未登录并且也没有进程以该用户身份运行,那么您需要知道他的凭据。使用使用 LogonUser API 的凭据,您将获得令牌。通过这个你生成一个新的令牌。
    • 谢谢回复。我不是远程机器的管理员,而是远程机器所在的 Active Directory 域的管理员。我的软件所在的机器类似于域控制器。如果 WTS API 是在 DC 本身上检索会话,我认为它很可能无法解决。我也想到了 LogonUser,但我不知道域用户的密码?有没有不知道密码的登录方法?
    • WTS API 从当前机器(即运行软件的机器而不是 DC)中检索令牌。如果您是域管理员,那么您应该有权访问其他域用户可以访问的文件夹,因为您是域管理员,如果权限被拒绝,您可以启用这些权限。作为管理员,如果用户已登录或某个进程作为该用户在计算机上运行,​​则您可以获得该用户的令牌。仅当用户在机器上通过身份验证并登录或某个进程以该用户身份运行时,才会创建令牌。否则没有令牌。
    • 我是域管理员。但是,如果 samba 服务器没有在文件夹属性的“共享”选项卡中给我一个文件夹的读取权限,我仍然无法访问它或读取它的权限。通过在“共享”选项卡中以允许的用户身份登录,我可以成功读取它的权限。这是我的另一个线程,它解释了为什么我需要访问令牌。stackoverflow.com/questions/11050243/…
    猜你喜欢
    • 2012-07-11
    • 2011-12-12
    • 2014-05-05
    • 1970-01-01
    • 2016-02-05
    • 2012-01-19
    • 2016-04-20
    • 2014-12-09
    • 2017-01-28
    相关资源
    最近更新 更多