До сегодняшнего дня я использовал оконную аутентификацию для своей корпоративной сети (встроенной в asp mvc 3.0). Однако из-за срочности необходимости логирования пользователей мне пришлось перейти к формам аутентификации.
Теперь все в порядке, кроме одной функции, которую я использовал для исследования каталога на сервере. В зависимости от прав пользователя пользователь мог читать некоторые каталоги и файлы. Это моя функция:
public static MvcHtmlString Explore()
{
WindowsIdentity id = (WindowsIdentity)HttpContext.Current.User.Identity;
MvcHtmlString s = null;
using (System.Security.Principal.WindowsImpersonationContext context = System.Security.Principal.WindowsIdentity.Impersonate(id.Token))
{
try
{
s = new MvcHtmlString(Explore(documentsRootFolder).ToString());
}
catch (Exception e)
{
HttpContext.Current.Response.Write(e.Message+"<br/>");
HttpContext.Current.Response.Write(e.StackTrace);
}
}
return s;
}
private static StringBuilder Explore(string path)
{
StringBuilder writer = new StringBuilder();
writer.Append("<ul>");
try
{
foreach (var a in System.IO.Directory.GetDirectories(path))
{
writer.AppendFormat("<li>{0}</li>", a.Replace((path.EndsWith(@"\") ? path : path+@"\"), string.Empty));
writer.Append(Explore(a));
}
foreach (var a in System.IO.Directory.GetFiles(path))
{
string url = a.Replace(documentsRootFolder, string.Empty).Replace(@"\", "/");
string friendlyName = a.Replace((path.EndsWith(@"\") ? path : path + @"\"), string.Empty);
writer.AppendFormat("<li><a href=\"Open?path={0}\">{1}</a></li>", url, friendlyName);
}
}
catch { }
writer.Append("</ul>");
return writer;
}
Конечно, с аутентификацией форм я не могу получить идентификатор Windows от пользователя HttpContext. Как я теперь могу читать каталоги и файлы?
P.S: Я попытался использовать advapi32.dll, чтобы получить идентификатор пользователя Windows. Однако после входа в систему невозможно выйти, не закрыв браузер (ssi). Вот почему я ищу другое решение. Можно ли получить токен идентификатора Windows без входа в систему?
Спасибо