Пользовательская форма публикации страниц SharePoint с аутентификацией Windows - PullRequest
0 голосов
/ 25 августа 2018

Я новичок в SharePoint и хочу понять, как получить информацию о пользователях, вошедших в систему (проверка подлинности Windows), когда я отправляю настраиваемую форму на совместно размещенную конечную точку WCF?

**HTML**    
<form action="/TestWCF/Submit" method="post">
      First name: <input type="text" name="fname"><br>
      Last name: <input type="text" name="lname"><br>
      <input type="submit" value="Submit">
    </form>

**WCF**
    public void Submit(User user)
    {

    }

Сохраняет ли отображаемая страница SharePoint файл cookie, который я должен передать вместе со своим пользовательским методом публикации?потому что, если это веб-приложение asp.net, я могу получить токен, хранящийся в клиенте, отправить его на сервер и проверить его.но SharePoint у меня мало контроля.

1 Ответ

0 голосов
/ 27 августа 2018

Имя пользователя подтверждено пользователем. Это делается классом FarmService.Authentication.DistributorValidator в сборке FarmService. Этот класс наследует от класса WCF UserNamePasswordValidator и переопределяет метод Validate.

public class DistributorValidator : UserNamePasswordValidator

{

public override void Validate(string userName, string password)

{

    if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))

        throw new SecurityTokenException("Username and password required");

    var repository = new DistributorRepository();

    if (! repository.IsKnownDistributor(userName, password))

        throw new FaultException(string.Format("Wrong username ({0}) or password ", userName));

}

}

За исключением одной детали, которая абсолютно необходима. Для проверки подлинности по имени пользователя на вашем сервере, на котором размещена служба, требуется сертификат X509. В противном случае все сервисные вызовы не будут выполнены. Этот сертификат указан в поведении службы.

<serviceCertificate findValue="Farm" storeLocation="LocalMachine" storeName="TrustedPeople"  x509FindType="FindBySubjectName"/>

Сначала вам нужен сертификат. Вместо покупки одного (который привязан к определенному адресу сервера и, следовательно, бесполезен для тестирования), вы можете создать свой собственный. .NET Framework поставляется с инструментами для их создания, и есть несколько руководств по использованию этих инструментов. Гораздо проще сделать самообслуживание универсальным инструментом, который позаботится обо всем процессе за пару кликов.

Здесь вам не говорят о том, что вы должны запускать инструмент от имени администратора, иначе он выйдет из строя наиболее неблагодарно. То, что инструмент также неясно, где хранить сгенерированный сертификат. По умолчанию он хранится в MyStore. При проверке сертификата его надежность зависит от места его хранения. Когда хранилище не является доверенным, запускается цепочка проверки. Вместо настройки цепочки сертификатов вы также можете напрямую хранить свой сертификат в надежном хранилище.

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

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

var endPoint = new EndpointAddress(new Uri(Farm.FarmUrl), EndpointIdentity.CreateDnsIdentity("Farm"));

var binding = new WSHttpBinding();

binding.Security.Mode = SecurityMode.Message;

binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
var result = new CustomerDeskOperationsClient(binding, endPoint);

result.ClientCredentials.UserName.UserName = Farm.FarmUserName;

result.ClientCredentials.UserName.Password = Farm.FarmPassword;

Подробности могут относиться к Простой сервис WCF с аутентификацией по имени пользователя по паролю

Надеюсь, это поможет!

...