Подключение к кубу Microsoft Analysis Services с двойной аутентификацией Windows - PullRequest
2 голосов
/ 10 августа 2010

Я пытаюсь обеспечить проверку подлинности Windows для пользователей приложения .Net на веб-сервере для доступа к кубу в базе данных служб аналитики Microsoft на SSAS и просто схожу с ума, пытаясь заставить его работать!

Я использую <identity impersonate="true" /> в web.config. Анонимный доступ отключен в IIS и выбрана встроенная проверка подлинности Windows. AppPool работает как указанная личность; отдельная учетная запись Windows, которой была предоставлена ​​«Учетная запись является доверенной для делегирования» в Active Directory. У меня также есть сетевые парни, чтобы создать и зарегистрировать SPN для этой личности на веб-сервере. Пользователи, пытающиеся получить доступ к приложению .Net, не имеют «Учетная запись чувствительна и не может быть делегирована», выбранной в их учетных записях AD.

Работает нормально, если пользователь обращается к приложению .Net локально с веб-сервера, но при доступе к приложению .Net с ПК клиента они получают сообщение об ошибке: «на транспортном уровне обнаружена ошибка» преждевременно закрыл соединение ". Делая трассировку с помощью SQL Profiler, я вижу, что NTUserName, пытающийся безуспешно аутентифицироваться, является АНОНИМНЫМ ЛОГОНОМ.

Почему он не делегирует аутентификацию пользователя ??

Решение:

Регистрация имени участника-службы для службы OLAP, как описано здесь на сервере SSAS это исправило! т.е. Setspn.exe -A MSOLAPSvc.3 / Servername mydomain \ theuser.

1 Ответ

2 голосов
/ 10 августа 2010

Похоже, ваше веб-приложение на самом деле не захватывает их личность и / или не передает их в приложение .NET. Можете ли вы настроить тестовую страницу, чтобы убедиться, что она получает идентификатор Windows?

Редактировать: Эта статья может помочь: http://www.eggheadcafe.com/articles/20050703.asp

Попробуйте настроить пустую страницу debug.aspx, чтобы она говорила в коде что-то вроде:

private void Page_Load(object sender, System.EventArgs e)
{
    Response.Write("Page Identity: " + Page.User.Identity.Name);
    Response.Write("Windows Identity: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    Response.Write("Thread Identity: " + System.Threading.Thread.CurrentPrincipal.Identity.Name);
}   

Нажмите эту страницу с клиентского ПК, это поможет вам понять, над чем в действительности работает веб-страница. Статья может помочь вам решить, как решить проблему.

...