Active directory 持久化允许以后模拟的windows身份验证权限令牌

Active directory 持久化允许以后模拟的windows身份验证权限令牌,active-directory,windows-authentication,impersonation,Active Directory,Windows Authentication,Impersonation,想想像IfThisThenThat(IFTTT.com)这样的服务。在那里,我对服务(twitter、evernote、gmail、dropbox等)进行身份验证,并授权IFTTT代表我行事(大概是通过存储某种令牌)。如果我不再想授权IFTTT冒充我,我可以随时撤销令牌 如果我想对内部服务的windows身份验证执行相同的操作,该怎么办 我想象用户会使用windows身份验证访问网页,并批准创建某种令牌,我可以将其保存在数据库中。之后,当我需要在该用户的上下文中运行某些东西(如内部web服务)时

想想像IfThisThenThat(IFTTT.com)这样的服务。在那里,我对服务(twitter、evernote、gmail、dropbox等)进行身份验证,并授权IFTTT代表我行事(大概是通过存储某种令牌)。如果我不再想授权IFTTT冒充我,我可以随时撤销令牌

如果我想对内部服务的windows身份验证执行相同的操作,该怎么办

我想象用户会使用windows身份验证访问网页,并批准创建某种令牌,我可以将其保存在数据库中。之后,当我需要在该用户的上下文中运行某些东西(如内部web服务)时,我会获取令牌并运行某种模拟代码(至少在您知道密码的情况下是微不足道的)


什么技术/概念是实现这一点的好方法?

好吧,Kerberos用于登录到Windows机器,它实际上做了一些与您描述的非常类似的事情。当您登录时,您将被授予一张票证授予票证,然后可以使用该票证使用相同的帐户登录到其他服务。但是,Kerberos票证会在较短的时间内过期,如果您不想再次登录,则必须在过期之前发出新的票证。您不能只将Kerberos票证存储在数据库中,然后在以后的会话中再次使用它。它是专门为防止此类用例而设计的,因此如果票据最终被泄露,它将是无用的。通常,默认情况下,超过5分钟的票证将被拒绝。这里有一个指向Kerberos上MSDN文档的链接,以获取有关其工作原理的更详细信息:


说到这里,Windows确实允许系统服务模拟用户。如果您是以系统管理员或管理员成员的身份运行,则可以调用
ZwCreateToken
为几乎任何帐户创建令牌。对如何使用它进行了深入的描述(其中包括一系列其他内容,并提供了一个示例程序)。请注意,这是一篇相当长的文章,涉及到许多有关Windows登录的详细信息,而且它也有点陈旧。据我所知,它的原则应该仍然正确,代码应该仍然有效。

在我看来,如果这是可能的话,密码几乎毫无意义。我看不到或想不出任何应用程序或服务在不记录帐户密码的情况下执行此操作的方式或示例。同意@Ashigore,不存储凭据是不可能的。有趣的阅读主题: