2012-01-24 3 views
0

Я разрабатываю веб-сайт ASP.NET. Я планирую использовать проверку подлинности с помощью форм в целях обеспечения аутентификации/авторизации, но я столкнулся с двумя проблемами по поводу разрешения:Как проверить авторизацию при использовании проверки подлинности на основе форм?

  1. Я знаю, как установить в веб-конфигурации, что идентифицированные пользователи могут посетить веб-страницы (скажем, myPage.aspx). Но я не знаю, как определить, что UserA может получить доступ к myPage для извлечения его информации, а не информации UserB. Я думал о создании токена, когда пользователь аутентифицируется, поэтому я могу проверить, кому принадлежит этот токен, и проверить, доступна ли эта информация для него. Что вы думаете об этом подходе? Вызывает ли аутентификация формы такой токен? (Я не мог найти упоминания об этом в своих исследованиях). Если нет, смогу ли я адаптировать механизмы аутентификации формы для создания или мне нужно будет написать все самостоятельно?

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

Я спрашиваю об этом, потому что у меня нет опыта в разработке механизмов аутентификации/авторизации, любая помощь/подсказка будет оценена по достоинству.

ответ

1

Что касается вопроса 1, то после проверки подлинности форм в приложении веб-форм ASP.Net идентификатор пользователя отображается как объект в свойстве Page.User.Identity. Этот объект имеет свойство Name, которое содержит имя пользователя, которое пользователь использует для входа на ваш сайт. Вы можете использовать это значение, чтобы ограничить доступ пользователя. Например, предположим, что у вас есть таблица в базе данных с информацией о пользователях, содержащую следующие поля:

userId int 
userName varchar(25) 
...more fields containing user information... 

Вы можете ограничить пользователю только доступ к информации из строки в этой таблице, в которой имя_пользователя равна Page. User.Identity.Name, либо напрямую, если вы используете прямой ADO.Net или через свой запрос к объекту домена ORM (т.е. nHibernate или EF).

Что касается второго вопроса, объект FormsIdentity, открытый через page.User.Identity, имеет логическое свойство IsAuthenticated. Вы можете использовать это, чтобы ограничить доступ к вашему веб-сервису следующим образом:

if(Page.User.Identity.IsAuthenticated) 
{ 
    //Call your web service in a secure manner 
} 
+0

Это здорово, я обязательно попробую это. Только один вопрос: если я знаю имя пользователя моих друзей, не могу ли я каким-то образом войти в свою учетную запись, но изменить значение имени пользователя на мой друг? – JSBach

+0

Нет, я не считаю, что это возможно. Я считаю, что конвейер asp.net извлекает содержимое зашифрованного cookie аутентификации ASP.Net, которое оно генерирует при успешном входе в систему и использует это для заполнения объекта Page.User.identity. Поскольку этот файл cookie зашифрован, его невозможно подделать. –

+0

Это именно то, что мне тогда нужно! Большое спасибо :) – JSBach

Смежные вопросы