Создание файла cookie проверки подлинности с помощью форм для сканера поисковых систем - PullRequest
0 голосов
/ 28 ноября 2011

Общая картина: меня попросили создать поисковую систему для внутренней сети нашей компании. Такая поисковая система будет сканировать страницы, предоставленные ей XML-файлами, для каждого независимого приложения в интрасети. Проблема в том, что вся интрасеть использует проверку подлинности с помощью форм, и поэтому сканер должен иметь доступ к каждому приложению без фактических учетных данных пользователя (например, имени пользователя и пароля).

Доступ к каждому приложению в интрасети контролируется диспетчером разрешений, который, по сути, является оберткой для стандартного Role Manager ASP.NET. Каждое приложение может определять свои собственные роли и назначать людей с такими ролями.

Обратите внимание, что существует потенциально сотни приложений.

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

Проблема, с которой я сталкиваюсь, заключается в следующем: как создать файл cookie для проверки подлинности форм, которому уже назначены роли, без создания соответствующего пользователя (IPrincipal).

Вполне возможно, что я не смог полностью понять, как работает Аутентификация с помощью форм, и если да, скажите, пожалуйста, что я могу сделать по-другому.

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Это, вероятно, не то, что вы хотите услышать, но ...

Я бы хотел, чтобы сканер аутентифицировался, как и все остальные.

Учитывая, что это сканер, которым вы управляете, зачем бороться с проверкой подлинности с помощью форм? Кажется логичным создать пользователя со всеми необходимыми ролями в каждом приложении (надеюсь, у вас есть точка централизованного администрирования для сотен приложений, иначе я бы не хотел быть там администратором; -)

Если вы делаете что-то, что разрешает специальный доступ «только сканеру» (обходя аутентификацию на основе пользователя на основе ... что? Пользовательский агент сканера? IP-адрес определенного источника?), Вы создаете дыру в безопасности, которую может взломать хакер. использовать для получения доступа ко всем приложениям интрасети, которые в противном случае были тщательно защищены с помощью идентификаторов пользователей, паролей и ролей (на самом деле дыра в безопасности особенно велика, поскольку вы предлагаете предоставить доступ к КАЖДОЙ роли в системе).

1 голос
/ 02 декабря 2011

Звучит так, будто вы хотите получить соответствующий зашифрованный System.Web.Security.FormsAuthenticationTicket (который затем присоединяется к HTTP-запросу в виде файла cookie).

Логика шифрования находится в System.Web.Security.FormsAuthentication.Encrypt (), которая, я думаю, использует MachineKey в качестве ключа шифрования. Также взгляните на логику GetAuthCookie () (используя Reflector).

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

0 голосов
/ 01 декабря 2011

Мне кажется, что проблема еще не до конца определена (по крайней мере, мне!).
Зачем вам нужно сканировать страницы и индексировать их, если на них есть детальные разрешения ?! Как вы показываете результаты поиска, не нарушая разрешения? Почему бы не проиндексировать серверную часть, пропустив страницы целиком (я имею в виду индексирование записей базы данных, а не страниц) ....

...