Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Подскажите, как правильно организовать аутентификацию на формах? Без использования Вижуал Студио. Какие шаги нужно сделать? И в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2014, 15:18 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Поторопился, в вопросе не было про MVC ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2014, 15:31 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Мембершип, в топку формы и мембершип! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2014, 17:30 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
hVostt, Просвети, поиз, по новым трендам, мне сейчас как раз авторизацию делать, а во всех моих учебниках - мембершип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2014, 19:24 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.ProПросвети, поиз, по новым трендам, мне сейчас как раз авторизацию делать, а во всех моих учебниках - мембершип. ASP.NET Identity Overview примеры кода можно получить так: 1. Создать проект MVC 5 2. Обновить все пакеты Update-Package 3. Перезапустить проект (закрыть студию и открыть заново) 4. Установить пакет Microsoft.AspNet.Identity.Samples вот так: Код: c# 1. изучайте. самое примечательное, что Microsoft AspNet Identity не зависит от IIS и от тонны ASP.NET кода, отлично взаимодействует с OWIN и WebAPI. напрямую работает с EF (да вообще с чем угодно), в отличие от устаревших техник, которые работают с базой данных только напрямую. и не слушайте тех, кто говорит что SimpleMembership вещь годная. вовсе нет, это уродец. всё дело в банальной привычке и нежелании что-то там изучать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2014, 15:08 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
благодарю - поизучаю как понимаю, в MVC 4 это не работает, надо проапгрейдить проект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2014, 15:23 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
А для старичков , сидящих на вебформах 2.0 есть какой-нибудь годный туториал? Просто все что я находил в сети ориентировано на создание инфраструктуры мембершипа из студии, а как без этого тула быть, как руками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2014, 16:50 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
hVostt, Вот только сейчас добрался, поставил пример и офигел, увидев этот многоэтажный огород. Нет, ну я конечно, за неделю могу досконально разобраться, как это все работает и взаимодействует друг с другом. Только вот нафиг мне не требуется вся эта система управления пользователями, ролями, их EF структура управления хранением пользователей/ролей, вся эта двухступенчатая регистрация, счетчики неправильного ввода паролей и страницы блокированных пользователей и чего там еще есть. У меня пользователи сами не регистрируются, их создает админ. Система наборов прав и совокупностей прав как ролей - тоже своя, хранение и управление пользователями - тоже, проверку логина/пароля я могу обеспечить своей реализацией. То есть, по большому счету мне нужно от системы аутентификации очень немного, то есть: 1) Обеспечение входа-выхода пользователя с точки зрения его браузера/текущей сессии (как в пределах сессии, так и с функцией "запомнить меня" между сессиями) 2) Знание в контексте контроллера текущего пользователя (либо ID, либо экземпляра моего класса пользователя) Я буду очень признателен тебе, если ты дашь примерный список классов и методов, достаточных для решения только указанных задач. Это сэкономит мне массу времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 19:00 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.ProВот только сейчас добрался, поставил пример и офигел, увидев этот многоэтажный огород. лишнее просто надо выкинуть и всё. вот очень простой туториал, как добавить новую аутентификацию в веб формы. http://www.asp.net/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project если роли не нужны, просто не пользуйся ими, не нужны функции регистрации, смены пароля и т.д. и т.п., тоже самое, просто не используй их. в целом ASP.NET Identity Не зависит от базы данных и EF, т.е. можно не использовать EF, но тогда придётся реализовать интерфейсы IUserStore и другие, которые требуются по задаче. лучше разобраться самостоятельно, глубоко вникать не надо, основное в туториале, остальное можно по ходу дела раздуплить. желательно использовать именно ASP.NET Identity, так как на сегодняшний день это активно продвигаемый и развиваемый подход. да, возможно завтра они придумают что-то другое, но это уже философия, которую даже не интересно слушать. можно использовать SimpleMembershipProvider, но он по умолчанию хочет запихать свои данные в базу данных самостоятельно, что чаще всего не айс. можно использовать старую модель провайдеров мембершипа, по этому делу материала в сети более чем достаточно. можно ничего из предложенного не исопльзовать, и реализовать полностью свой механизм со своим блекджеком и ко. в общем рекомендую ASP.NET Identity, который на мой взгляд менее избыточен и независим, чем другие, и в целом удачен. если используется EF, то для EF есть готовые адаптеры, ничего писать практически не надо, только скопировать и подкорректировать код инициализации. куда уж проще то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 01:34 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, ещё вот тут добрый дядька МСУ, да вон тот, который машет своей пятернёй из бани, накидал кучу полезного материала по теме: http://codearticles.ru/catalogs/501 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 01:38 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.Proпримерный список классов и методов, достаточных для решения только указанных задач Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 10:23 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Если не использовать EF, а также для понимания внутренней кухни Identity рекомендую тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 11:47 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Последовательность шагов, которая у меня получилась, чтобы прикрутить к проекту MVC4 аутентификацию (не авторизацию) Identity в минимальном варианте (заодно в своей голове все уложу): 1) Проапгрейдиться до MVC5/WebAPI2 (полезная информация тут , тут ) 2) Установить пакеты: Identity Core Identity Owin Owin Host SystemWeb 3) Реализовать интерфейс Microsoft.AspNet.Identity.IUser (для примера пусть будет MYUser) Собственно - там минимальный набор полей - Id и Name, то бишь смело можно прикручивать к любому своему классу пользователя 4) Реализовать интерфейс Microsoft.AspNet.Identity.IUserStore<MYUser> (для примера пусть будет MYUserStore). Это класс для организации работы с хранилищем пользователей, интерфейс представляет собой простой CRUD-набор методов. 5) Создать startup-класс. Различные варианты его размещения и обнаружения описаны тут . Ориентировочное содержимое: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 6) выпилить из web.config winforms-аутентификацию 7) При логине пользователя используется (очень упрощенно) следующая схема Код: c# 1. 2. 3. 4. 5. 6. 7. Также при необходимости в этот ClaimIdentity можно напихать других Claim-ов (мне это пока не нужно, глубоко не рылся, можно почитать тут , тут ). SignIn устанавливает пользователю куку, которая и хранит все эти Claim-ы. Соответственно, разлогинить пользователя - SignOut. Также в контроллере можно использовать атрибут [Authorize] обычным образом 8) При работе авторизованный пользователь представлен объектом ClaimIdentity, через который можно получить его claim-ы, Можно получить ID и Name методами GetUserName и GetUserId. В представлении объект доступен через @User.Identity (но надо добавить пространство имен Microsoft.AspNet.Identity в представление или в web.config). Соответственно, в контроллере - HttpContext.User.Identity ===================================================================== собственно, вот. Поправьте плиз, если я что-то неправильно понял. Также у меня остались следующие вопросы: а) при доступе авторизованного пользователя мне доступен его ID, дальше я могу сам создать экземпляр класса пользователя. Или все-таки он уже где-то создан? б) связанный вопрос - в вышеописанном примере мне вообще не требовалось реализовывать CRUD-методы для хранилища, если я использую создание экземпляра класса пользователя другими способами. Однако "пустую" реализацию создать все равно пришлось, чтобы иметь возможность создать экземпляр UserManager. В какой момент эта реализация все таки потребуется? Если я решу использовать штатное управление пользователями? в) как я понимаю, авторизация завязана на куки? Как сейчас принято поступать, если пользователь куки не поддерживает или отключил? просто отказываются работать (попробовал пару веб-приложений - они меня послали при отключенных куках) г) в примерах, которые я смотрел, экземпляр AuthenticationManager-а не получают каждый раз, а хранят в статической переменной в пределах контроллера. Это нормальная практика, ничем не грозит? А почему для каждого контроллера, почему тогда уж не на уровне приложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2014, 16:41 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.Proа) при доступе авторизованного пользователя мне доступен его ID, дальше я могу сам создать экземпляр класса пользователя. Или все-таки он уже где-то создан? нет, его надо доставать из базы по Id или по Name Shocker.ProВ какой момент эта реализация все таки потребуется? Если я решу использовать штатное управление пользователями? да. создание пользователя лучше делать через UserManager. для работы с пользователями: получать коллекцию, фильтровать и т.д. использовать UM не обязательно. Shocker.Proв) как я понимаю, авторизация завязана на куки? Как сейчас принято поступать, если пользователь куки не поддерживает или отключил? просто отказываются работать (попробовал пару веб-приложений - они меня послали при отключенных куках) токен придётся сохранять постоянно в адресной строке. но вообще ситуация с отключением куков примерно такая же как и с отключением javascript -- интернет становится практически неюзабельным. мало кого заботят параноидальные индивидуумы. Shocker.Proг) в примерах, которые я смотрел, экземпляр AuthenticationManager-а не получают каждый раз, а хранят в статической переменной в пределах контроллера. Это нормальная практика, ничем не грозит? А почему для каждого контроллера, почему тогда уж не на уровне приложения? смысла его хранить нет. правильно получать через OwinContext как в вашем примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2014, 20:49 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
hVosttда. создание пользователя лучше делать через UserManager.почему? Что такого он дополнительно делает при создании? И еще, вдруг до меня дошло. На уровне модели у меня нет ни контекста контроллера, ни сессии и т.п. То есть единственный способ иметь текущего пользователя в модели (а это нужно в 99,5% случаев) - передавать его через все конструкторы модели? Или есть какая-нибудь менее напряжная метода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 15:53 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.Proпочему? Что такого он дополнительно делает при создании? пароль хеширует, например. выдаёт токен для подтверждения... это же блэкбокс. Shocker.ProИ еще, вдруг до меня дошло. На уровне модели у меня нет ни контекста контроллера, ни сессии и т.п. То есть единственный способ иметь текущего пользователя в модели (а это нужно в 99,5% случаев) - передавать его через все конструкторы модели? Или есть какая-нибудь менее напряжная метода? можно через IPrincipal получить Id пользователя и при необходимости вытащить из базы на уровне модели, без участия контроллера или сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:13 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
hVosttможно через IPrincipal получить Id пользователяб-р-р, почитал-не понял, как это можно сделать на уровне модели, не имея контекста... экземпляр модели ведь вообще существует сам по себе. Поясни, плиз, бестолковому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:32 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.Proб-р-р, почитал-не понял, как это можно сделать на уровне модели, не имея контекста... экземпляр модели ведь вообще существует сам по себе. Поясни, плиз, бестолковому. получить Id пользователя: Код: c# 1. 2. 3. 4. 5. 6. 7. участия контроллера, сессии или чего-то ещё не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:48 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
А, спасибо!!! Я-то понимал, что единственная ниточка, связывающая модель и контекст - это поток, не не думал, что настолько напрямую можно получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:57 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.ProА, спасибо!!! Я-то понимал, что единственная ниточка, связывающая модель и контекст - это поток, не не думал, что настолько напрямую можно получить но вообще, желательно получать IPrincipal через свой интерфейс, чтобы можно было тестировать, например, используя DI контейнер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 17:20 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Я думаю, что сделаю свой метод расширения для Thread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 17:31 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Гм, получается такая шняга. Через тред я могу получить ид/имя пользователя, а мне постоянно нужен для работы экземпляр класса пользователя. Создание экземпляра = обращение к базе, поэтому хотелось бы создавать его не более одного раза за реквест. Попробовал создать тред-статик поле для экземпляра класса пользователя, но этот тред в пуле и может предоставляться другим реквестам. Подкиньте гениальную идею, как бы мне иметь легкий и безопасный доступ к экземпляру класса пользователя (созданному в начале этого реквеста) из любого места в пределах исполнения реквеста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 14:33 |
|
||
|
Аутентификация шаг за шагом
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Все уже придумано за нас, используйте Dependency Injection, рекомендую Autofac, он гарантирует жизнь экземпляра в пределах реквеста, а получать вы можете его в любом месте, не заботясь о том кто и как его создал. Опять же, для тестирования хорошо. Суть такая, делаете некий сервис, допустим IUserService со свойством, например, CurrentUser. Реализация сервиса получает через конструктор IPrincipal и UserManager. Теперь, везде где требуется экземпляр юзера вы втыкаете в конструктор IUserService. Экземпляр сервиса на весь реквест будет один, соответственно экземпляр пользователя можно вытаскивать один раз из менеджера по запросу. Инъекция работает на всех топ уровнях, включая фильтры, контроллеры, вьюхи и далее вглубь вашей модели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 15:43 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=66&tid=1357054]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 282ms |
| total: | 407ms |

| 0 / 0 |
