безопасный способ аутентификации администратора в ASP.NET сайт, использующий OpenID с DotNetOpenID
Воодушевленный таким образом, я пытаюсь написать ASP.NET сайт, использующий OpenID для аутентификации пользователя. Это обычный сайт WinForms (нет MVC.NET), используя библиотекуDotNetOpenId для аутентификации.
Безопасно ли для меня разрешать / запрещать административные функции на сайте, просто сравнивая текущий сеанс "ClaimedID" (как возвращено в событии OpenIdLogin_LoggedIn, как член DotNetOpenId.RelyingParty, OpenIdEventArgs.Ответ.ClaimedIdentifier) к известному OpenID администратора (то есть мой)?
Если да, то безопасно ли, чтобы этот идентификатор был виден (например, в открытом исходном коде), или он должен быть "скрыт" в файле конфигурации или строке базы данных? (Я знаю, что это лучший дизайн, чтобы сделать его настраиваемым, мой вопрос только о безопасности.)
2 ответа:
Джаррет делает несколько хороших замечаний об использовании таблиц базы данных.
Просто чтобы ответить на еще один ваш вопрос, нет, это не конфиденциальная вещь, чтобы поместить свой OpenID в ваш код вообще. Если настройка ролей кажется излишней для вашего сайта, простая проверка равенства с вашим ClaimedIdentifier просто идеальна.
Мое решение состоит в том, чтобы следовать той же идее таблицы ролей. После проверки подлинности пользователя просмотрите его роли. Если пользователь имеет роль "администратор" в таблице UserRoles, то он может делать все, что может делать администратор.
Я не транслирую open ID в своем приложении. Они хранятся в таблице. В результате каждого действия я попадаю в таблицу пользователей, так как я также изменил свою для хранения различной информации о состоянии пользователя. За исключением главной страницы, есть будет некоторая информация о пользователе, которая мне нужна из этой таблицы. Я использую LINQ, поэтому включаю его .LoadWith (), чтобы загрузить пользователя с его списком ролей, когда он сериализуется.