gpt4 book ai didi

windows - 远程服务器 : LogonUser or LsaLogonUser? 的 Web 应用模拟

转载 作者:可可西里 更新时间:2023-11-01 14:51:43 27 4
gpt4 key购买 nike

我有一个 C# Web 应用程序(在某些配置中)允许用户输入 Windows 凭据,然后使用该凭据对远程服务进行身份验证。为此,我们目前调用 LogonUser并使用生成的 token 创建 WindowsIdentity,然后我们模拟它。它一直运行良好,没有真正的问题。

最近我在阅读有关 Web 身份验证的内容,并阅读了 IIS 使用 LsaLogonUser 进行基本身份验证的内容创建模拟上下文。我有点理解两者之间的区别,听起来我们应该使用 LsaLogonUser,但我讨厌为了不明确的好处而做出我不理解的更改。另一方面,从事 IIS 工作的人比我更了解 Windows API。

那么:哪个函数更适合 Web 应用程序?你会说使用 LogonUser 是错误的吗?为什么?是否存在一种情况(网络配置、用户权限等)可以工作而另一种不能工作的情况?使用 LogonUser 是否存在任何类型的安全风险?

最佳答案

您的问题中有很多问题,这里是对所有问题的快速回答,然后是一些细节。

  1. .Net 中的 Web 应用程序应使用 LogonUser。这是一个Microsoft Knowledge base article with sample code .
  2. 可以使用LogonUser,没有任何问题。这是您应该经常使用的功能。
  3. LogonUser 不支持 Kerberos Services 4 User (S4U),但 LsaLogonUser 支持。从更具历史意义的角度来看,LogonUser used to require TCB privilege ,但不再是(Passport 登录除外)。有一个 clever way around it anyway (在该页面中寻找“SSPI 的另一种用途”)。
  4. 同样的风险适用于这两个函数:您不能在错误消息或日志等中泄露密码。但是 LsaLogonUser 可以在没有密码的情况下获得 token ,这使得它在特定情况下更安全。

现在是答案 2、3 和 4 的一些细节

用LogonUser就可以了

如果它支持您的用例,您应该使用 LogonUser 而不是 LsaLogonUser。大多数时候,确实如此,因此您使用 LogonUser。 LsaLogonUser 可以工作,但是它有很多参数,有些是指向必须采用特定格式的内存的指针。换句话说,LsaLogonUser 是由 C 开发人员在打包结构和自相关指针时创建的……我不知道。酷吗?

LsaLogonUser 可以给你一个没有密码的 token (S4U)

在 Windows Server 2003 中引入了 Kerberos 用户服务 (S4U)。 S4U 允许您调用 KDC 并为用户获取 token ,而无需提供密码。该 token 是一个识别 token ,它不能用于冒充用户。 LogonUser 无法为您提供该 token ,但 LsaLogonUser 可以。

Keith Brown 解释 what is S4U and how to use it比我以往任何时候都好。

总结

只有一个用例是 LsaLogonUser 优于 LogonUser。但是自WindowsIdentity provides a constructor for that (S4U) ,我不明白为什么有人会在 .Net 应用程序中使用 LsaLogonUser。

你的代码很好;)

关于windows - 远程服务器 : LogonUser or LsaLogonUser? 的 Web 应用模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com