LogonUser的开销?

时间:2011-09-08 14:23:32

标签: .net authentication active-directory

在做了一大堆关于认证用户的阅读(一般都是在SO土地和互联网上)后,看起来很明显,用户认证的“最佳”方式(从而检测过期的密码等)是调用Win32 LogonUser(),而不是尝试在.NET中使用PrincipalContext.ValidateCredentials

然而,我并不完全清楚LogonUser实际上做了什么 - 因此它携带的开销是多少? MSDN's not entirely clear on this,最关心我的部分就在最后,说LogonUser调用了NPLoginNotify(),并不完全清楚这是做什么的(除了准备登录脚本),也不清楚结果如何电话。

我最初担心LogonUser会加载用户的个人资料,但是有些进一步的阅读已经把这个问题放在床上作为一个非问题(除非我在这个问题上错了,但我可以告诉LogonUser永远不会加载配置文件 - 这必须通过不同的函数调用显式加载。)

这是一个内部网webapp,需要能够对活动目录进行身份验证,因此应用程序会有许多登录和注销:最初可能不会那么多,但将来可能会大幅增加。似乎调用LoginUser的类型为LOGIN32_LOGIN_NETWORK,然后立即丢弃它给我的令牌可能是最好的路线。

是否有任何我不知道的开销,或者我只是过度担心?

1 个答案:

答案 0 :(得分:1)

MSDN页面似乎很清楚:

LOGON32_LOGON_NETWORK登录类型最快,但它有以下限制:

该函数返回模拟令牌,而不是主令牌。您不能直接在CreateProcessAsUser函数中使用此标记。但是,您可以调用DuplicateTokenEx函数将令牌转换为主令牌,然后在CreateProcessAsUser中使用它。

如果将令牌转换为主令牌并在CreateProcessAsUser中使用它来启动进程,则新进程无法通过重定向器访问其他网络资源,如远程服务器或打印机。例外情况是,如果网络资源不受访问控制,则新进程将能够访问它。