Подключение к SharePoint Online через прокси-сервер в объектной модели клиента

#c# #sharepoint #proxy #csom #sharepoint-online

#c# #sharepoint #прокси #csom #sharepoint-online

Вопрос:

У меня есть настольное приложение, в котором я использую CSOM для прямого подключения к сайту SharePoint Online. Проблема сейчас в том, что этот запрос должен быть сделан через прокси-сервер. Что я сделал до сих пор, так это то, что я передал настройки прокси-серверов, включая учетные данные для события ExecutingWebRequest ClientContext. Однако проблема заключается в классе SharePointOnlineCredentials. Я должен установить учетные данные ClientContext. Когда я передаю идентификатор пользователя и пароль конструктору этого класса, он внутренне отправляет запрос в SP для проверки учетных данных. Теперь я не могу установить / передать идентификатор прокси-сервера / пароль этому классу, поэтому прокси-сервер отклоняет запрос, я получаю исключение IdcrlException. Ниже приведен пример кода, который я использую на данный момент.

 SecureString passWord = new SecureString();
password.ToList().ForEach(passWord.AppendChar);
SP.ClientContext ctx = new SP.ClientContext(targetURL);

ctx.ExecutingWebRequest  = (sen, args) =>
    {
         System.Net.WebProxy myProxy = new System.Net.WebProxy();
         myProxy.Address = new Uri(this.proxyUrl);

         myProxy.Credentials = new System.Net.NetworkCredential(this.proxyUserName, this.proxyPassword);
         args.WebRequestExecutor.WebRequest.Proxy = myProxy;
     };


//This is the line which is causing the issue. 
ctx.Credentials = new SP.SharePointOnlineCredentials(this.userName, passWord);
  

Ожидаемый код успешно выполняется на прокси-серверах, которые не требуют никакой аутентификации. Это SharePointOnlineCredentials, который я не могу настроить. Я также пытался использовать NetworkCredentials вместо SharePointOnlineCredentials. Код успешно компилируется, но SP выдает запрещенное исключение.

Ответ №1:

Вы пробовали устанавливать параметры прокси-сервера в файле web config? Например:

   <system.net>
    <defaultProxy>
      <proxy
         usesystemdefault="False"
         proxyaddress="https://MyCompanyName.sharepoint.com/"
         bypassonlocal="True"

         />
    </defaultProxy>
  </system.net>
  

Затем переопределите в своем коде имя пользователя для подключения.

Также мне трудно понять, где находится строка кода, которая приводит к сбою вашего: ctx.Crednetials = new SP.SharePointOnlineCredentials (this.Имя пользователя, пароль);

Комментарии:

1. @Andrew Это фактический фрагмент кода. Я только что добавил комментарий, чтобы выделить строку, вызывающую исключение. Это строка, в которой приложение внутренне пытается установить соединение для проверки идентификатора пользователя и pwd. Это одноразовая функция, поскольку впредь, что бы я ни просил, проверка моих запросов не выполняется. Проблема в том, что я не могу передать настройки своего прокси классу SharePointOnlineCredentials , поскольку он пытается установить соединение в конструкторе. Я должен также сказать, что приложение является настольным приложением.