Хорошо, так что я смог ответить на свой вопрос после того, как долго обдумывал его.
По сути, BlogEngine.NET 2.5 (мое веб-приложение), похоже, переопределяет способ работы платформы .NET 4.0. Есть пара вещей, которые нужно исправить, все в BlogEngine.Core \ Security \ Security.cs (скачать исходный код BlogEngine.NET)
Часть 1: Исправить имя файла cookie
В нем есть метод FormsAuthCookieName, который я изменил следующим образом:
File: BlogEngine.Core\Security\Security.cs
Method: FormsAuthCookieName()
// return FormsAuthentication.FormsCookieName + "-" + Blog.CurrentInstance.Id.ToString();
return FormsAuthentication.FormsCookieName;
Это гарантирует, что имена файлов cookie совпадают. Одно препятствие ...
Часть 2. Избегайте веб-приложений / страницы входа BlogEngine.NET / элементы управления / код
Вместо того, чтобы направлять пользователей в логин BlogEngine.Net login.aspx (www.website.com \ blog \ account \ login.aspx), я указал все ссылки для входа в систему на моем главном сайте login.aspx. страница (www.website.com \ login.aspx). Если вам интересно, как реализовать собственную собственную аутентификацию по всему сайту, это супер-краткое руководство
msdn.microsoft.com/en-us/library/ff184050.aspx.
Мне также пришлось добавить что-то подобное и на веб-сайт web.config, и на веб-приложение web.config, чтобы каждый раз, когда к защищенному ресурсу обращался (с веб-сайта или веб-приложения), мой собственный глобальный / login / aspx используется.
<authentication mode="Forms">
<forms timeout="30" loginUrl="/login.aspx" blah blah />
</authentication>
Теперь мои собственные общие элементы управления входом в систему для всего сайта будут создавать файлы cookie аутентификации (стандарта .NET Framework) и файлы cookie роли (пользователя). Избегая login.aspx в BlogEngine.NET, мы становимся чище, и мы избегаем называть этот код проблематичным.
File: BlogEngine.Core\Security\Security.cs
Method: AuthenticateUser(string username, string password, bool rememberMe)
Подробности: Этот код добавляет «экземпляр блога» в файл cookie, поэтому, если у вас есть несколько блогов в одном домене, это предотвращает автоматическую аутентификацию пользователя user1 на экземпляре блога 1. аутентифицировано в экземпляре блога 2. Я предполагаю, что у большинства будет только один блог на домен (www.domain.com \ blog!), так что это не нужно. Что еще более важно, эта проверка нарушает нашу единую регистрацию.
Два препятствия вниз ...
Часть 3. Исправление проверки авторизации для доступа
Теперь наш стандартизированный login.aspx не добавляет специфический идентификатор экземпляра BlogEngine.NET (см. Выше). Это было бы хорошо, за исключением того, что есть еще некоторый код BlogEngine.NET, который специально ищет это. Нам также не нужна эта проверка, поэтому давайте удалим эту оскорбительную проверку ...
File: BlogEngine.Core\Security\Security.cs
Method: void Init(HttpApplication context)
// Comment line below to revert to only-framework/default processing
//context.AuthenticateRequest += ContextAuthenticateRequest;
Так что на данный момент у вас должно быть
- Все логины обрабатываются одним логином, доступным для всего сайта. ASPX
- Все куки-файлы аутентификации и куки-файлы ролей пользователей, созданные вышеупомянутым сайтом wide login.aspx
- Все такие файлы cookie зашифрованы и защищены как для веб-сайта, так и для веб-приложения web.configs (которые должны совпадать!)
Что, в свою очередь, позволяет использовать единый вход :) !! Ура!