2012-07-27 2 views
0

У меня есть приложение asp.net 4.0 (клиент), которое делает вызовы ajax/json на фасад http, который затем передает вызовы на наш сервисный уровень wcf.Forms Authentication Cookie и WCF

Пользователи должны пройти аутентификацию на клиенте с использованием проверки подлинности форм. Тогда идея состоит в том, что cookie аутентификации будет передан и будет доступен на http-фасаде. [Дизайн, основанный на книге Дино Эспозито - Microsoft ASP.NET и AJAX: Архитектурные веб-приложения]

Проблема в том, что на фасаде HttpContext.Current.User.Identity.Name является пустой строкой, а IsAuthenticated - false.

Я включил совместимость, добавив следующее в моем system.serviceModel раздел в моем web.config (HTTP уровня фасада):

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

Я украсил мою службу следующий:

[AspNetCompatibilityRequirements(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Required)] 

Когда я отлаживаю приложение ajax/facade, я вижу, что файлы cookie существуют в HttpContext.Current.Request.Cookies. Похоже, что используется аноним, а не мой аутентифицированный пользователь.

Оба приложения работают на одном сервере IIS.

Звонки на услугу wcf с поддержкой AJAX осуществляются через serviceProxy.js. Возможно, этот метод не передает необходимый файл cookie?

В настоящее время трассировка WCF показывает «..ASPXANONYMOUS = .....; ASP.NET_SessionId = ....; .ASPXAUTH = ..... 'в журнале сообщений.

У меня такое ощущение, что я пропустил что-то простое, но слишком близко к проблеме.

Любые предложения приветствуются.

ответ

1

Я не уверен, что полностью понимаю контекст того, что вы пытаетесь выполнить, но если это два отдельных приложения, вам понадобится разделить машинные ключи, чтобы дешифровать/зашифровать файлы cookie в обоих случаях.

в вашем web.config, убедитесь, что у вас есть следующий набор:

<machineKey 
    validationKey="[generated key]" 
    validation="HMACSHA512" 
    decryptionKey="[generated key]" 
    decryption="AES" 
    /> 

посмотреть, как генерировать эти ключи (и больше информации о них) на этой Codeproject статье:

ASP.Net machineKey Generator - CodeProject

Дайте мне знать, если это поможет ...

+0

Спасибо, Leland. Я должен тебе пиво или что-то в этом роде. Я предположил, что машинный ключ для каждой машины, а не какой-то другой для каждого приложения. Это два отдельных приложения. –

+0

Нет проблем, Тим. Рад, что это помогло. Обычно они просто сгенерированы автоматически, что может вызвать у вас проблемы даже для одного приложения, поскольку файлы cookie не будут совпадать, если вы повторно развернете (даже на том же компьютере). Могут закончиться тем, что пользователи безумны, когда их флажок «Запомнить меня» не работает ... –