Аутентификация Windows на Sharepoint


Обновление:

Хорошо, теперь это решено. Код работает, но права доступа на сервере Sharepoint оказались неверными. Так что это облегчение.


Я использую VBA для отправки запроса из Excel в Sharepoint через его веб-службы. Это корпоративная интрасеть, поэтому я понимаю, что аутентификация Windows должна происходить в фоновом режиме, пока я использую свой логин Windows для доступа к Sharepoint (что я и делаю). Я проверил, что режим аутентификации установлен на «Windows». Но я все еще получаю сообщение об ошибке «Отказано в доступе», когда пытаюсь это сделать.

Вот XML, который я отправляю:

<?xml version="1.0" encoding="utf-8" ?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
          <listName>listname1</listName> 
          <updates>
            <Batch OnError='continue' ListVersion='1'>
            <Method ID='1' Cmd='Delete'>
                <Field Name='ID'>7582</Field>
            </Method>
            </Batch>
            </updates>
        </UpdateListItems>
      </soap12:Body>
    </soap12:Envelope>

Я попытался отправить имя пользователя и пароль в заголовке Soap, таким образом:

      <soap12:Header>
        <AuthHeader xmlns="http://schemas.microsoft.com/sharepoint/soap/">
          <UserName>user1</UserName>
          <Password>password1</Password>
        </AuthHeader>
      </soap12:Header>

Без разницы.

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

Вот VBA, который я использую для отправки XML (скопирован из другого места на StackOverflow):

Dim xmlhtp As New MSXML2.XMLHTTP
Dim XMLDOC As New DOMDocument
Dim XMLstr As String
With xmlhtp
    .Open "POST", "https://sharepoint.address/_vti_bin/lists.asmx", False
    .setRequestHeader "Host", "sharepoint.address/site1823/Lists/HC Movement"
    .setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
    .send XMLstr

    XMLDOC.LoadXML .responseText
    MsgBox .responseText
End With

Замена «HC Movement» на «HC%20Movement» ничего не меняет.

Меня не волнует, происходит ли это незаметно в фоновом режиме: если пользователи должны вводить свои учетные данные, пусть будет так. И если у кого-то есть решение, совершенно отличное от того, что есть у меня, это тоже хорошо. Просто нужно иметь возможность удалять и добавлять записи в Sharepoint из Excel, и в течение нескольких дней упирались в кирпичную стену.

Я неплохо разбираюсь в VBA, но никогда раньше не пользовался веб-сервисами. Любая помощь будет очень признательна.

Спасибо.


person Squander Two    schedule 11.06.2013    source источник
comment
привет .. Я пытаюсь обновить sharepoint через excel, используя доступ к базе данных. я могу обновить базу данных доступа, когда база данных локально сохранена, но когда я синхронизирую точку доступа и доступ, я не могу обновить доступ... можете ли вы помочь с этим... моя конечная цель - обновить точку доступа. ссылка и код моего вопроса и stackoverflow.com/questions/31518867/   -  person Tushar Saha    schedule 20.07.2015


Ответы (1)


С .Net вы можете передать учетные данные пользователя, но я не нашел способа с VBA (пока). Если вы не возражаете против того, чтобы ваши пользователи вводили свое имя пользователя/пароль, я бы сейчас пошел по этому пути. Создайте пользовательскую форму с текстовым полем для имени пользователя и текстовым полем с маской для пароля. Вы даже можете предварительно заполнить имя пользователя, если хотите:

Dim myUser As String
myUser = Environ("USERNAME")

Затем передайте введенные значения в ваш веб-запрос. Измените команду .Open, чтобы включить переменные (например, myUsername и myPassword):

.Open "POST", "https://sharepoint.address/_vti_bin/lists.asmx", False, myUsername, myPassword

Создайте ловушку ошибки для неправильного пароля, и все готово.

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

person Tony Karel    schedule 18.07.2013
comment
Если вы хотите немного углубиться во все это, я бы посоветовал работать с .Net через Excel DNA. или тому подобное. Мне приходилось создавать надстройки Excel, которые требовали функциональности .Net, и я предпочел пойти по этому пути. - person Tony Karel; 18.07.2013