У меня есть пустое тестовое приложение, созданное в VS 2005 как приложение ASP.NET. MSDN saysASP.NET ASP.NET код страницы работает выдал себя, хотя олицетворение отключено
По умолчанию ASP.NET не использует олицетворение, а ваш код выполняется с использованием идентификатора процесса приложения ASP.NET.
И у меня есть следующие Web.config
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
-->
<compilation debug="true" defaultLanguage="c#" />
<!--
The <authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.
-->
<authentication mode="Windows"/>
<identity impersonate="false"/>
<!--
The <customErrors> section enables configuration
of what to do if/when an unhandled error occurs
during the execution of a request. Specifically,
it enables developers to configure html error pages
to be displayed in place of a error stack trace.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
</system.web>
</configuration>
Так что, кажется, олицетворение отключена, как и the article предлагаю.
Мой ASPX является пустым по умолчанию и отделенного кода является
namespace TestWebapp
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(String.Format("Before1: Current Princupal = {0}", Thread.CurrentPrincipal.Identity.Name));
WindowsImpersonationContext ctx = WindowsIdentity.Impersonate(IntPtr.Zero);
try
{
int a = 0;
System.Diagnostics.Debug.WriteLine(String.Format("After: Current Princupal = {0}", Thread.CurrentPrincipal.Identity.Name));
} finally
{
ctx.Undo();
}
}
}
}
Когда я перезагрузить страницу, я получаю следующий отладочный вывод:
[5288] Before1: Текущий Princupal = DOMAIN \ User [5288] После того, как: Текущий Princupal = DOMAIN \ User
Outpu т то же самое с
<identity impersonate="false"/>
веб-сайт использует по умолчанию пул приложений и пул настроен для использования учетной записи сетевой службы для своих рабочих процессов. Я уверен, что приложение использует файл web.config, который должен использовать, и рабочий процесс w3p.exe работает под NETWORK SERVICE.
Что может быть неправильным в этом случае?
Спасибо!
@Edit: Rob, спасибо за отзыв! Ярлык $ user показывает мне, что все происходит так, как я ожидаю: с олицетворениями у меня есть процесс, выполняющий пользователя NT AUTHORITY \ NETWORK SERVICE, и поток имеет DOMAIN \ User перед WindowsIdentity.Impersonate (IntPtr.Zero) и «No Token. Нить не выдавала себя за руки. после. Но Thread.CurrentPrincipal.Identity.Name и HttpContext.Current.User.Identity.Name по-прежнему дают мне DOMAIN \ User в обоих местах.
@Edit: Я обнаружил, что, чтобы получить Thread.CurrentPrincipal и HttpContext.Current.User изменил мне придется вручную делать это:
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
HttpContext.Current.User = Thread.CurrentPrincipal;
Я не уверен, что дело здесь, но так или иначе. У меня теперь есть проблема с sharepoint shared services, управляющим разрешением профиля пользователя, но это еще один вопрос.
Спасибо за этот отзыв о пользователе $. Для пользователя $ он показывает, что (теперь у меня) все так, как я ожидал. Перед WindowsIdentity.Impersonate (IntPtr.Zero) есть токен пользователя без имени и без токена, и этот процесс находится под NETWORK SERVICE –
axk
2008-10-29 17:42:57
Но System.Threading.Thread.CurrentPrincipal.Identity.Name и HttpContext.Current.User.Identity .Name все равно дает мне олицетворяемого пользователя. – axk 2008-10-29 17:43:39