Как сделать автоматическая регистрацию и авторизацию на форуме из уже существующего проекта на ASP.NET MVC?
Здравствуйте, есть сайт на asp.net mvc, там своя авторизация на основе WebSecurity.Login. Появилась задача установить форум и интегрировать его с существующим сайтом, что бы пользователям не нужно было дважды регистрироваться и авторизироваться на форуме и сайте. Плюс ко всему сайт крутится на .Net 2.0 а форум YAF.NET на 4.0.
Вероятно имеется ввиду аутентификация пользователя а не авторизация. Если используемые провайдеры для хранения используют куки (и они совместимы), тогда можно сделать для поддоменов и домена (например forum.app.com и app.com), при этом куки в обоих приложениях сохраняем для app.com и MachineKey (требуется для расшифровки куков) у приложений должен быть одинаковым. К сожалению пример могу показать только для Microsoft.AspNet.Identity.
Сергей: перевел хранение сессий в базу, для обоих приложений настроил machinekey, создал одинаковых пользователей с одинаковыми id, login и password. Авторизация не проходит, такое ощущение что сессия для каждого приложения создается своя
Daeamon: Посмотри какие куки создает каждое из приложений и для какого домена/поддомена. Тикет (информация об аутентифицированном пользователе) это не сессия этого пользователя, поэтому не понимаю причем здесь хранение сессий. Данные пользователя оба приложения должны читать из одной и той же базы данных иначе как тяжело будет их синхронизировать (изменить пароль например).
Сергей: в каждом приложении свои поля у пользователей, своя структура. В нашем приложении используется старая по всей видимости версия membership, в форуме новая, я сомневаюсь что их вообще возможно слить в одно.
Daeamon: Ок, попробую по порядку за авторизацию пользователей отвечает Membership провайдер, за сессии session провайдер, за role сам догадаешся :) По всей видимости в MVC у тебя старый Simple Membership Provider (сейчас рекомендуется identity) в YAF не знаю. Посмотри для обоих в webconfig https://msdn.microsoft.com/ru-ru/library/6e9y4s5t%... В любом случае, для того что бы не спрашивать у пользователя каждый раз логин и пароль при успешном login провайдер шифрует (machinekey) и пишет некую информации в куки, имя кука тоже можно настроить. При получении запроса провайдер прежде всего ищет соответствующую куку (проверяет, что она не протухла) и пытается её расшифровать. Итого для того, что бы заработала сквозная аутентификация нужно настроить, что бы оба провайдера использовали куку с одними и тем же именем и использовали один и и тот же maсhimekey.
Такс, с аутентификацией я разобрался, вроде как при наличии одинаковых пользователей проходит. Осталось разобраться как теперь в базе форума при отсутствии пользователя создавать.
Сергей: Спасибо за помощь))) Не подскажете еще откуда берется ProviderUserKey? Он используется в таблице Membership и имеет 16 ричный вид DA0C2DF2-D417-4B3F-A805-A3AE2076CBCC. Как мне такой сгенерировать?
Daeamon: С этими провайдерами не работал и откуда берется не подскажу, но это похоже на GUID так что Guid.NewGuid() должен подойти, если найдете где присвоить.