сигурен начин за удостоверяване на администратор в ASP.NET сайт с помощта на OpenID с DotNetOpenID

Окуражен от SO, опитвам се да напиша ASP.NET сайт, който използва OpenID за удостоверяване на потребителя. Това е обикновен сайт на WinForms (не MVC.NET), използващ библиотеката DotNetOpenId за удостоверяване.

Безопасно ли е за мен да разреша/отказвам административни функции на сайта, като просто сравня „ClaimedID“ на текущата сесия (както се връща в събитието OpenIdLogin_LoggedIn, като член DotNetOpenId.RelyingParty,OpenIdEventArgs.Response.ClaimedIdentifier) ​​с OpenID на известен администратор (т.е. моята)?

Ако е така, безопасно ли е този идентификатор да бъде видим (напр. в код с отворен код) или трябва да бъде „скрит“ в конфигурационен файл или в ред на база данни? (Знам, че е по-добър дизайн, за да може да се конфигурира, въпросът ми е само за безопасността.)


person Eric    schedule 11.09.2008    source източник
comment
Имахте предвид WebForms, а не WinForms?   -  person Ian Ringrose    schedule 16.06.2009


Отговори (2)


Джарет прави някои добри коментари относно използването на таблици от бази данни.

Само за да отговоря на още един от вашите въпроси, не, не е конфиденциалност да поставите своя OpenID в кода си като цяло. Ако настройването на роли изглежда пресилено за вашия сайт, простата проверка за равенство спрямо вашия ClaimedIdentifier е просто перфектна.

person Andrew Arnott    schedule 17.12.2008

Моето решение е да следвам същата идея на таблицата с роли. След като сте удостоверили потребителя, потърсете ролите на този потребител. Ако потребителят има роля „Администратор“ в таблицата UserRoles, тогава той може да прави всичко, което администраторът може да направи.

Не излъчвам отворени идентификатори в приложението си. Те се съхраняват в таблицата. При всеки резултат от действие натискам таблицата Users, тъй като също модифицирах моята, за да съхранява различна информация за състоянието на потребителя. С изключение на началната страница, ще има някаква потребителска информация, която ми трябва от тази таблица. Използвам LINQ, така че включвам .LoadWith(), за да заредя потребителя с неговия списък с роли, когато се сериализира.

person Jarrett Meyer    schedule 11.09.2008