Включить SSO в веб-приложении Silverlight / .NET: NTLM? - PullRequest
3 голосов
/ 23 марта 2011

Я использую Silverlight, .NET 4 (с VB), RIA Services и разрабатываю под VS 2010. Я пытаюсь разработать приложение, которое позволяет использовать единый вход (единый вход в систему, то есть автоматическую аутентификацию приложения через имя пользователя Windows и Active Directory) и использовать проверку подлинности с помощью форм (для входа в базу данных при сбое единого входа), и именно здесь У меня проблемы.

То, что я пытался сделать, это:

  1. при запуске приложения получить имя пользователя Windows посредством вызова сервера со службами RIA (эквивалент веб-службы), который затем возвращает имя, найденное в HTTP-запросе (HttpContext.Current.Request.LogonUserIdentity.Name). Почему такой дорогой звонок? Поскольку имя пользователя Windows просто не доступно на стороне клиента, как показывают другие темы переполнения стека ...

  2. , затем попробуйте зарегистрировать пользователя, найденного в Active Directory: эта часть в порядке.

Часть 1 работает на локальном компьютере (у меня действительно есть что-то вроде «DOMAIN \ USER», но это потому, что веб-сервер dev работает на моем компьютере), но когда приложение развернуто на удаленном сервере, оно больше не работает (я затем «SERVICE NT \ NETWORK», которую я не могу использовать).

Вы знаете, как я мог бы избавиться от этой большой проблемы? Вот мои первые треки:

  • удалось получить имя пользователя на стороне клиента (но из того, что я мог прочитать, это было бы чудом; даже с использованием javascript на странице ASP.NET по умолчанию я не смог)
  • использовать механизм аутентификации NTLM .NET
  • настроить IIS или используемый сервер (Windows Server 2008) так, чтобы на стороне сервера я получал хорошего «ДОМЕНА \ ПОЛЬЗОВАТЕЛЯ» (может быть, через настройки доверия ...?)
  • использовать проверку подлинности Windows, но как я могу тогда проверять пользователей по БД?

Спасибо за вашу помощь, это сводит меня с ума ... Более того, это тоже становится насущным: - (

1 Ответ

0 голосов
/ 05 апреля 2011

Ну, единственный способ, который я нашел, - это получить пользователя с помощью JavaScript и элемента управления ActiveX:

var wshshell = new ActiveXObject("wscript.shell");
var username = "UserID=" + wshshell.ExpandEnvironmentStrings("%username%");

Конечно, это вызывает проблемы с развертыванием, так как:

  • все ваши пользователи должны использовать I.E.
  • они должны установить I.E. параметры для разрешения ActiveX

Мне повезло, так как 1-й пункт был специально упомянут, для пункта 2 я использовал файл .reg для выполнения на всех компьютерах, не мог найти лучше .

...