Как «отменить себя» (без делегата?) В Kerberos - PullRequest
4 голосов
/ 15 января 2010

У меня есть веб-приложение, использующее Kerberos для доступа к внешнему ресурсу с использованием ASP.NET 3.5 и IIS.

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

UPDATE

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


Хранение в Kerberos и нужен обзор делегирования? Прочитайте первую часть этого ответа: https://stackoverflow.com/a/19103747/215752.

1 Ответ

7 голосов
/ 20 января 2010

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

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

...