Что такое VB.Net/C#-эквивалент ADSYSTEMINFO, и нужно ли взаимодействовать с AD в этом примере? - PullRequest
0 голосов
/ 16 ноября 2011

Я смотрю на старый ASP-код, который содержит следующее:

Set objDSE = GetObject("LDAP://RootDSE")
Set objSysInfo = CreateObject("adsysteminfo") 
Set objUser= Getobject("LDAP://" & Replace(objSysInfo.UserName,"/","\/"))
dtmValue = objUser.PasswordLastChanged

objMaxPwdAge = GetObject("LDAP://" & objDSE.get("DefaultNamingContext")).maxPwdAge

dblMaxPwdDays = Abs(objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart) _
                * ONE_HUNDRED_NANOSECOND / SECONDS_IN_DAY

pwdExpDate = dtmValue + dblMaxPwdDays

Это приложение для интрасети, которое использует встроенную аутентификацию.

Есть ли замена для объекта ASP adsysteinfo? Я, вероятно, могу портировать большинство вызовов LDAP, используя System.DirectoryServices.DirectoryEntry, но есть ли лучший / более простой способ сделать это в ASP.NET (VB.Net или C #)?

Есть ли документация о том, как преобразовать свойства объекта ASP в свойства DirectoryEntry?

1 Ответ

1 голос
/ 16 ноября 2011

В вашем примере кода adsysteminfo просто используется для получения текущего имени пользователя. В приложении ASP.Net вы можете получить это одним из двух способов, в зависимости от вашей конфигурации:

1) Если вы выдаете себя за каждого пользователя, тогда вы сможете использовать:

Return System.Security.Principal.WindowsIdentity.GetCurrent().Name

2) Если вы не выдаете себя за пользователя, но встроенная аутентификация является единственным механизмом безопасности для веб-сайта, вы можете получить доменное имя пользователя следующим образом:

Return Request.ServerVariables("logon_user")

Что касается другого вызова LDAP, System.DirectoryServices определенно то, что вы хотите использовать. Вот пример того, как мы подключаемся к AD, чтобы начать поиск пользователей:

* * 1010

Затем мы можем использовать m_Searcher, чтобы начать извлекать то, что нам нужно из AD (это только один пример использования служб каталогов).

...