Сообщение об ошибке: запрос токена безопасности не может быть выполнен из-за сбоя аутентификации - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь получить доступ к службе WCF (MS CRM 2011) и получаю вышеуказанную ошибку. Если я запускаю свою программу-пример из отладчика VS2010 с помощью Cassini или IIS Express, это прекрасно работает. Нет ошибок аутентификации.

Однако, если я публикую сайт на своем локальном IIS 7.5 (под управлением 64-разрядной версии Windows 7), я получаю сообщение об ошибке в строке, которая захватывает идентификатор пользователя CRM (WhoAmIResponse).

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

Сайт, опубликованный в IIS, имеет свой web.config, установленный для ...

    <authentication mode="Windows">
    </authentication>
    <identity impersonate="true"/>

Сайт работает под предустановленным пулом приложений ASP.NET v4.0, режим интегрированного конвейера, учетная запись ApplicationPoolIdentity.

Вот мой код ...

public class DemoController : Controller
{
    public ActionResult Index()
    {
        ClientCredentials credentials = new ClientCredentials();
        credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

        var _serviceProxy = new OrganizationServiceProxy(new Uri("http://svr-rex2011-dev/TimeEntry/XRMServices/2011/Organization.svc"),
                                                            null,
                                                            credentials,
                                                            null);

        // This statement is required to enable early-bound type support.
        _serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());

        IOrganizationService service = (IOrganizationService)_serviceProxy;

        // Display information about the logged on user.
        Guid userid = ((WhoAmIResponse)service.Execute(new WhoAmIRequest())).UserId;
        SystemUser systemUser = (SystemUser)service.Retrieve("systemuser", userid,
            new ColumnSet(new string[] { "firstname", "lastname" }));

        // Retrieve the version of Microsoft Dynamics CRM.
        RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
        RetrieveVersionResponse versionResponse =
            (RetrieveVersionResponse)service.Execute(versionRequest);

        ViewBag.FirstName = systemUser.FirstName;
        ViewBag.LastName = systemUser.LastName;
        ViewBag.Version = versionResponse.Version;

        return View();
    }

}

Есть идеи? Высоко ценится !!!

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Кажется, что вы описываете ситуацию так: вы получаете ошибки аутентификации, когда ваше приложение пытается получить доступ к службе CRM, когда оно работает на IIS.Когда вы запускаете свое приложение из Visual Studio или IIS Express, у вас не возникает ошибок аутентификации.

Если это так, я уверен, что ваша проблема связана с идентификацией, используемой для запуска IIS AppPool дляваше приложение.Вам нужно изменить идентификатор AppPool на тот, который имеет сетевой доступ к службе CRM.Обычно это должна быть учетная запись домена с правильными разрешениями, но есть способы сделать это, используя учетные записи локальных компьютеров с одинаковым паролем (определенно не рекомендуется, если домен доступен).

0 голосов
/ 08 мая 2013

У меня была такая же проблема, и в моем случае это произошло из-за того, что CRM был сбалансирован по нагрузке.Оказывается, что Делегирование аутентификации через Kerberos не работает в архитектурах с балансировкой нагрузки .

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

Надеюсь, это сэкономит кому-то несколько часов, которые мне стоили.

...