2010-01-15 5 views
3

У меня есть веб-приложение, использующее Kerberos для доступа к внешнему ресурсу, использующему ASP.NET 3.5 и IIS.Как «un-impersonate» (un-delegate?) В Kerberos

Когда пользователь подключается к приложению, аутентификация Kerberos автоматически позволяет подключиться к внешним ресурсам, действующим как пользователь, использующий делегирование. Это было непросто сделать. Это хорошо, но у меня проблема. Иногда мне нужно подключиться к внешнему ресурсу, используя учетную запись с большим количеством прав, чем пользователь. У учетной записи службы, в которой работает приложение, есть права на добавление, которые мне нужны. Как удалить идентификатор Kerberos пользователя и подключиться к Kerberos, используя учетную запись службы, запускающую пул приложений?

UPDATE

Я не знаю, почему я не подвожу никаких ответов на все. Я этого раньше не видел. Пожалуйста, публикуйте вопросы, они могут прояснить проблему (для меня тоже).

+0

Это Kerberos ..... –

ответ

5

У меня есть класс:

public class ProcessIdentityScope : IDisposable 
{ 
    private System.Security.Principal.WindowsImpersonationContext _impersonationContext; 
    private bool _disposed; 

    public ProcessIdentityScope() 
    { 
     _impersonationContext = System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero); 
    } 

    #region IDisposable Members 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!_disposed) 
     { 
      _impersonationContext.Undo(); 
      _impersonationContext.Dispose(); 
      _disposed = true; 
     } 
     else 
      throw new ObjectDisposedException("ProcessIdentityScope"); 
    } 

    #endregion 
} 

И я использую его следующим образом:

using(ProcessIdentityScope identityScope = new ProcessIdentityScope()) 
{ 
    // Any code in here runs under the Process Identity. 
} 

Этот код основан на этой статье MSDN: http://msdn.microsoft.com/en-us/library/ms998351.aspx

+0

Dang @Ryan, это похоже на то, что я хочу. Я должен получить шанс проверить это завтра. – Hogan

+0

BTW, это решение отлично работает в производстве, снова спасибо @Ryan – Hogan

+0

@Hogan: Рад, что я мог помочь! – Ryan

Смежные вопросы