想想像IfThisThenThat(IFTTT.com)这样的服务。在那里,我对服务(twitter,evernote,gmail,dropbox等)进行身份验证,并授权IFTTT代表我行事(可能是通过存储某种令牌)。如果我不想再授权IFTTT冒充我,我可以随时撤销令牌。
如果我想对内部服务的Windows身份验证做同样的事情会怎样?
我想用户会使用Windows身份验证访问网页 - 并批准创建某种令牌,我可以在数据库中保留。然后,当我需要在该用户的上下文中运行某些东西(比如内部Web服务)时,我会使用该令牌并运行某种模拟代码(至少在您知道密码时是微不足道的。)
哪些技术/概念是一个很好的方法呢?
答案 0 :(得分:2)
好吧,Kerberos用于登录Windows机器,它实际上与您已经描述的内容非常相似。登录时,您将获得一个票证授予票证,然后可以使用该票证登录具有相同帐户的其他服务。但是,如果您希望避免再次登录,则Kerberos票证将在较短的时间范围内到期,并且必须在到期前发布新票证。您不能只将Kerberos票证存储在数据库中,并在以后的会话中再次使用它。它专门用于防止此类用例,因此如果故障单最终会受到损害,那么它将毫无用处。通常,默认情况下会拒绝超过5分钟的票证。以下是有关Kerberos的MSDN文档的链接,以获取有关其工作原理的更详细信息:
MSDN: Microsoft Kerberos (Windows)
说完所有这些之后,Windows确实允许系统服务模拟用户。如果您以SYSTEM或管理员身份运行,则可以调用ZwCreateToken
为几乎任何帐户创建令牌。 This article深入介绍了如何使用它(在一堆其他内容中并提供了示例程序。)请注意,这是一篇很长的文章,涉及有关Windows登录和它也有点老了。它的原则应该仍然是真的,但据我所知,代码应该仍然有效。