DefaultCredentials при доступе к веб-службам CRM / Sharepoint - PullRequest
7 голосов
/ 03 февраля 2009

Я сделал приложение, которое обращается к веб-сервису CRM. Проблема в том, что когда я развернул dll на сервере Sharepoint, он вернул ошибку 401 неавторизованным. Видимо System.Net.CredentialCache.DefaultCredentials не работал (мое подозрение). Вот код.

CrmSdk.CrmAuthenticationToken token = new CrmSdk.CrmAuthenticationToken();
token.AuthenticationType = AuthenticationType.AD;
token.OrganizationName = ORGANIZATION_NAME;

CrmService service = new CrmService();
service.Url = "http://crmserver:5555/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.PreAuthenticate = true;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

Идет наоборот.

Когда я создал приложение, которое обращается к веб-службе Sharepoint (кодирование плагина), и развернул его на сервере CRM. Не удалось получить доступ к веб-службе Sharepoint. Несанкционированная ошибка. Вот код:

Lists listService = new Lists();
listService.PreAuthenticate = true;
listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
listService.Url = "http://sharepointserver/webname/_vti_bin/Lists.asmx";

Мой CRM-сервер и сервер Sharepoint находятся в одном домене.

Для обоих кодов, если я изменил часть учетных данных на что-то вроде этого, затем развернул его на сервере, он может работать.

service.Credentials = new NetworkCredential("username", "password", "domain");

Тем не менее, я не хочу этого делать, потому что он показывает пароль пользователя в коде. Кто-нибудь может мне помочь?

IIS на обоих серверах не разрешает анонимный доступ и использует встроенную проверку подлинности Windows.

Спасибо


С моего локального компьютера я могу получить доступ к веб-службам CRM или веб-службам Sharepoint. Я предполагаю, что авторизован, потому что DefaultCredentials отправил мои учетные данные, что его пароль сохранен в « Сохраненное имя пользователя и пароль » ( Панель управления> Учетные записи пользователей> вкладка Дополнительно> Управление паролями ) Таким образом, мне не нужно вводить:

service.Credentials = new NetworkCredential("username", "password", "domain");

и мои DefaultCredentials от моего локального компа авторизованы для доступа к веб-сервисам.

Я попытался реализовать это на сервере Sharepoint, который обращается к веб-службам CRM. и .. тадаа .. это не сработает. хахаха ..

можем ли мы ввести учетные данные в DefaultCredentials на сервере?

последнее, что я хочу сделать, это жестко закодировать учетную запись пользователя (как в коде выше)

Ответы [ 7 ]

1 голос
/ 13 июня 2009

Использование DefaultCredentials означает, что рабочий процесс ASP.NET или рабочий процесс IIS получит учетные данные пользователя, который запускает пул приложений IIS.

поэтому, если ваш пул приложений Dynamics CRM запущен под учетной записью пользователя Custom-CRM-Domain \ JohnDoe, это означает, что он получит привилегии под учетной записью пользователя Custom-CRM-Domain \ JohnDoe.

Проверьте учетную запись пользователя, который запускает пул приложений веб-приложения IIS CRM \ Sharepoint Application.

Это шаги для проверки пула приложений:

  1. Открыть сайт -> Правый клик -> Выбрать свойства
  2. Выберите вкладку Домашний каталог
  3. Обратите внимание на имя пула приложений в раскрывающемся списке ниже
  4. Теперь перейдите в папку «Пулы приложений»
  5. Попробуйте найти имя пула приложений, указанное в шаге 3 -> щелкните правой кнопкой мыши и выберите «Свойства»
  6. Выберите вкладку «Удостоверение», и вы найдете учетную запись пользователя, который запускает пул приложений

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

1 голос
/ 04 февраля 2009

Подтвердили ли вы, что учетные данные по умолчанию такие же, как и при явном указании? Возможно, учетные данные по умолчанию принадлежат другому аккаунту, чего вы не ожидаете.

РЕДАКТИРОВАТЬ # 1 : в соответствии с замечаниями для свойства DefaultCredentials в MSDN :

DefaultCredentials представляет системные учетные данные для текущего контекст безопасности, в котором приложение работает. Для клиентское приложение, это обычно учетные данные Windows (пользователь имя, пароль и домен) пользователь, запустивший приложение. За ASP.NET приложения, по умолчанию учетные данные являются учетными данными пользователя вошедшего в систему пользователя, или пользователь будучи подражающим.

Также необходимо убедиться, что пользователь, получающий доступ к странице CRM (совершая вызов веб-службы SharePoint), может получить доступ к веб-службе со своими учетными данными и наоборот. Если бы они могли, тогда казалось бы более вероятным, что происходит какое-то подражание.

Редактировать # 2 : Предполагая, что у вас есть доступ как к CRM, так и к серверу SharePoint, вы можете получить пик в журналах приложений и системы. Один или оба, скорее всего, должны указывать на неудачный вход в систему и указывать, какая учетная запись пыталась получить доступ к ресурсу (в данном случае это веб-службы).

1 голос
/ 03 февраля 2009

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

0 голосов
/ 26 февраля 2015

Для решения этой проблемы вам необходимо сначала узнать, какой пользователь запускает пул приложений, как сказали другие, и если вам нужно использовать CredentialCache.DefaultCredentials, то вам нужно добавить пользователя, скажем, svcadmin или тому подобное, в «Вторичное семейство сайтов администратор ", запустив приложение центра администрирования SharePoint. Таким образом, SP позволяет пользователю, которому были переданы учетные данные, получить доступ к тем вещам, которые ему необходимы. enter image description here

0 голосов
/ 02 апреля 2009

, чтобы иметь возможность использовать defaultcredentials, пользователь в активном каталоге должен быть определен как в SharePoint, так и в CRM, и иметь достаточно привилегий, чтобы делать то, что вы делаете с кодом.

И попробуйте использовать sdk (у классов crm есть вспомогательные классы) вместо определений служб.

0 голосов
/ 11 февраля 2009

Не знаком с Sharepoint, но разве вы не можете просто сохранить информацию о соединении в конфигурации и использовать встроенные инструменты для защиты вашего web.config? Вот что я делаю.

http://aspnet.4guysfromrolla.com/articles/021506-1.aspx

0 голосов
/ 06 февраля 2009

service.Credentials = System.Net.CredentialsCache.DefaultNetworkCredentials;

Попробуйте это.

...