Проверка подлинности Windows WCF и ASP.Net MVC2: получение информации о пользователях AD в веб-сервис wcf - PullRequest
0 голосов
/ 11 августа 2011

Здравствуйте, товарищи по StackOverflow и программисты. У меня есть вопрос, я пытаюсь переместить созданный мной веб-сайт MVC на тестовый сервер, чтобы пользователи могли начать тестирование ... Я столкнулся с небольшой проблемой, которую упустил из виду при разработке сайта. Мой веб-сайт вызывает службу, которую я написал, которая берет имя пользователя AD, вызывающего службу, и использует его для выполнения некоторой серверной работы ...

    private string CallerNameOnly = string.Empty;
    private string CallerFullDomain = string.Empty;

    public ACOService()
    {
        this.CallerFullDomain = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name.ToString();
        this.CallerNameOnly = this.CallerFullDomain.Substring(this.CallerFullDomain.IndexOf('\\') + 1);
    }

Это прекрасно работало, когда я разрабатывал на своем локальном компьютере, и мое имя пользователя было передано в службу очень хорошо ... Однако мне трудно реплицировать те же функции, когда я развертываюсь на сервере, который я использую ... По какой-то причине текущий пользователь в конце концов становится именем моей машины ... Теперь я, кажется, изолировал проблему с параметром в IIS 7, который при изменении несколько изменяет поведение моего веб-сайта ... Если я перехожу к дополнительным настройкам пулов приложений и меняю поле Модель процесса / Идентичность из LocalSystem , к любому другому идентификатору. Это меняет того, кто пользователь ... Мой удаленный отладчик продолжал глючить на мне, поэтому я не мог понять, какое имя пользователя было, но вы поняли идею?
У меня вопрос: как мне получить имя пользователя, использующего мой веб-сайт (который использует проверку подлинности Windows) для вызова моей веб-службы с именем пользователя, которое он использовал для доступа к моему сайту? Я думал о том, чтобы получить имя пользователя и передать его непосредственно в конструктор, т.е. ...

    public ACOService(string userID)
    {
        this.CallerNameOnly = userID;       
    }

но это создает проблемы, потому что у меня уже есть конструктор со строкой в ​​нем. И я думаю, что должен был бы поместить конструктора в мой контракт, не так ли? Как это будет работать в WCF? Любая помощь с этой проблемой будет принята с благодарностью.

1 Ответ

1 голос
/ 12 августа 2011

Вам необходимо выдать себя за клиента на сервисе.

http://msdn.microsoft.com/en-us/library/ms731090.aspx

...