Аутентификация при обращении к веб-приложению веб-части Sharepoint 2003

Есть sharepoint 2003. Разработана веб-часть.

Когда пользователь обращается к веб-части, проходит проверку подлинности на стороне сервера.

Мне нужно в веб-части отправить запрос в веб-приложение. Когда я отправляю запрос на сервер, где развернуто веб-приложение, пытаюсь войти в учетную запись сервера, где развернута веб-часть.

И мне это нужно, когда я отправляю запрос на сервер, на котором развернуто веб-приложение, используемое для аутентификации учетной записи пользователя, который обращается к веб-части.

Тип аутентификации: NTLM

Как веб-часть может превратиться в веб-приложение с именем пользователя, который обращается к веб-части?


Найдены два возможных решения:

1. Добавьте Web.config в WebPart со следующим содержимым:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <authentication mode="Windows" />
    <identity impersonate="true" />
  </system.web>
</configuration>

Это не помогает. Не понятно почему.

2. Используйте следующий код:

        WindowsIdentity winId = (WindowsIdentity)Context.User.Identity;
        WindowsImpersonationContext ctx = null;

        try
        {
            // Start impersonating.
            ctx = winId.Impersonate();
            // Now impersonating.
            // Access resources using the identity of the authenticated user.
            _autocompleteService.SendParametersForAutoComplete(_loger,
                        new KeyValuePairString("performerId", performerId),
                        new KeyValuePairString("templatePath",
                                                StringConverter.EncodeToURL(templatePath)),
                        new KeyValuePairString("specificationId", specificationId),
                        new KeyValuePairString("buyerId", buyerId),
                        new KeyValuePairString("performerCompanyId", performerCompanyId),
                        new KeyValuePairString("reestrItemId", reestrItemId),
                        new KeyValuePairString("sessionId", sessionId));
        }
        // Prevent exceptions from propagating.
        catch
        {
        }
        finally
        {
            if (ctx != null) ctx.Undo();
        }

Этот код взят по ссылке: http://msdn.microsoft.com/en-us/library/aa480475.aspx

Это не помогает. Не понятно почему.

В чем может быть причина в обоих случаях?

1 ответ

Нашел ответ - почему не работает второй вариант.

Когда вы олицетворяете пользователя, вы можете получить доступ к локальным ресурсам как этот пользователь, но не к удаленным ресурсам.

Как я могу решить проблему, используя первый вариант?

Другие вопросы по тегам