Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
Доброго времени суток, друзья. Помогите, пожалуйста, мне. Я замучился... честно... ОЧЕНЬ много информации совершенно не понятной мне. Чуть ли не десятки способов аутентификации, создания модели БД и прочее... Я в этом деле новичек (разработки бизнес-приложений) и очень хочется разобраться в этом всём деле.

В общем так: Есть приложение с простой формой Логин-Пароль. Допустим имеется MySQL сервер с базой данных. В нём имеются таблицы... ну пусть Users (со списком всех пользователей, их логинов и паролей (пароли возможно буду кодировать в MD5) - приложению ведь надо как-то аутентифицировать пользователя?) и таблицы с разной информацией. Я хочу создать приложение, которое будет располагаться на хостинге (на том же где и БД), то есть это стандартное веб-SL приложение, и, после проверки достоверности введенных логина и пароля, выдавать соответствующий пользователю контент.

В связи с этим, возникает ряд вопросов по поводу безопасности соединения с БД и приложения в целом. Я это вижу так - у БД имеются (минимум) 3 учетные записи - условно пусть будут guest (имеет доступ только чтение только для таблицы Users), user (доступ на чтение остальных таблиц), admin (доступ на запись всех таблиц). Первоначально происходит соединение приложения с БД по записи guest (Вопрос: пароль и логин для соединение по учетной записи guest, видимо, придется хранить в самом приложении. Это безопасно? Ведь приложение можно скачать с сервера, а, затем, и вскрыть его. Посоветуйте, как тут лучше организовать этот вопрос?), далее, после проверки на соответствие логина и пароля, программа создаёт новое соединение с бд по учетной записи user или admin (опять таки, где хранить эти пароли для соединения с бд?), и выдаётся соответствующий контент согласно логике работы приложения.

Плюс (хотя это минус), я совершенно не представляю как ИМЕННО грамотно произвести соединение с БД. Ручками? Каким-то компонентом? Пожалуйста, посоветуйте безопасные варианты.

Теперь - сервис аутентификации. Нужен ли он мне и как его применить здесь?

Таким образом, я прошу Вас подсказать мне следующее:
1. Сервис аутентификации. Нужен ли он мне и, если да, то как его применить здесь?
2. Где безопасно хранить (и в каком виде) информацию логина-пароля для соединения с БД?
3. Каким образом наиболее правильно и безопасно совершать соединение с БД?

Ну, и, Ваши рекомендации по поводу моего взгляда на работу приложения. Возможно, нужно делать что-то иначе? Я не прошу написать мне весь код (я сам хочу), я прошу помочь разобраться с организацией такого рода приложения. Хотя, какие-то куски кода могли бы и пригодиться. В общем вот так...
4 окт 12, 15:32    [13268539]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
skole
Member

Откуда:
Сообщений: 265
1. Да, нужен, что это и как его готовить прочитайте в книжке, в двух словах это не объяснишь как и ролевой доступ
2. В конфигурационном файле на сервере.
3. Для SL существует RIA services, как стандартная прокладка.
4 окт 12, 15:59    [13268779]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
skole
1. Да, нужен, что это и как его готовить прочитайте в книжке, в двух словах это не объяснишь как и ролевой доступ
2. В конфигурационном файле на сервере.
3. Для SL существует RIA services, как стандартная прокладка.

2. В конфигурационном файле на сервере.
То есть, на самом хостинге? Это REG.RU, я там таких вещей как "конфигурационный файл" не видел. Можно, пожалуйста, подробнее? И потом, почему приложение будет иметь к нему доступ, а, скажем, случайный гость сайта не будет?
4 окт 12, 16:27    [13269035]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
skole, и потом, обращение из SL приложения к какому-то файлу ведь будет явное в коде... или же дело действительно лишь в доступе этого файла? В таком случае, повторяется вопрос в предыдущем посте...
4 окт 12, 16:31    [13269079]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
Mans7
skole
1. Да, нужен, что это и как его готовить прочитайте в книжке, в двух словах это не объяснишь как и ролевой доступ
2. В конфигурационном файле на сервере.
3. Для SL существует RIA services, как стандартная прокладка.

2. В конфигурационном файле на сервере.
То есть, на самом хостинге? Это REG.RU, я там таких вещей как "конфигурационный файл" не видел. Можно, пожалуйста, подробнее? И потом, почему приложение будет иметь к нему доступ, а, скажем, случайный гость сайта не будет?

даже не знаю что и ответить, спрашиваете о базовых вещах
config
4 окт 12, 16:34    [13269105]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
skole
Member

Откуда:
Сообщений: 265
Для доступа к БД у вас будет логин и пароль, которые будут храниться в конфиге на сервере. Когда клиент запросит SL-приложение его клиентская часть установит вебсервис с сервером. Когда потребуются данные, клиентская часть обратится по вебсервису к серверной части, которая в свою очередь запросит данные из БД согласно ролевому доступу или какой-либо другой политике аутентификации данного клиента.
Чтобы не задавать лишних вопросов, прочитайте книжечку с описанием RIA services for Silverlight Если что будет непонятно, здесь вам объяснят.
4 окт 12, 17:08    [13269467]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
pation
Mans7
пропущено...

2. В конфигурационном файле на сервере.
То есть, на самом хостинге? Это REG.RU, я там таких вещей как "конфигурационный файл" не видел. Можно, пожалуйста, подробнее? И потом, почему приложение будет иметь к нему доступ, а, скажем, случайный гость сайта не будет?

даже не знаю что и ответить, спрашиваете о базовых вещах
config

Ааа, так речь идет о файле конфигурации ПРИЛОЖЕНИЯ! Я-то подумал о каком-либо спец.файле самого хостинга (или моего сайта этого хостинга). Теперь всё встало на свои места!

pation, skole, спасибо Вам большое, обязательно ознакомлюсь с указанной литературой как только смогу! И, если будет необходимо, обращусь ещё раз. Но, теперь, я хотя бы знаю в каком направлении копать - а это уже немало!
5 окт 12, 11:16    [13272371]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
skole
2. В конфигурационном файле на сервере.

С RIA сервисом в принципе разобрался. Сначала казался легче чем оказалось, но оказалось что не так трудно как тогда когда показался не таким уж и лёгким :)).

По делу: почитал что есть такая политика как сохранение инф-ии в этом файле - но как клиенту получить инф-ию из него? В клиентской части SL, на сколько я понял из полученного опыта, невозможно добавить сборку Configuration, в которой все инструкции с работой с этим файлом. Не могли бы подробнее описать как мне следуют использовать конфигурационный файл и обращаться к нему через клиент?
6 окт 12, 01:48    [13277235]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
skole
Member

Откуда:
Сообщений: 265
Зачем клиенту получать информацию из конфигурационного файла?
Сходи сюда и скачай пример такого сервиса http://code.msdn.microsoft.com/silverlight/Getting-Started-WCF-RIA-1469cbe2
6 окт 12, 10:03    [13277386]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
skole, а я вот по нему и учился, только в видео формате. Осталось научиться аутентифицировать пользователя и понять и реализовать ролевой доступ.
6 окт 12, 17:50    [13277841]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
skole
Member

Откуда:
Сообщений: 265
Ролевой доступ это простая задача, сделай таблицу с ролями в бд, напиши классы с публичными методами для проверки роли пользователя. Затем напиши модуль аутентификации, после аутентификации пользователи будут передавать в http header хэшкод, называется «билет» чтобы сохранять сессию. Все просто и понятно.
6 окт 12, 19:06    [13278026]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
skole
Затем напиши модуль аутентификации, после аутентификации пользователи будут передавать в http header хэшкод, называется «билет» чтобы сохранять сессию. Все просто и понятно.

Не особо просто и понятно... почти везде где есть модуль аутентификации - либо пример на кастомный модуль с нуля (а это слишком сложно для меня), либо готовые примеры на базе ASP.Configuration, а это совершенно не то - т.к. это хранение всех пользователей в конфиге серверной части. У меня же - в бд.

Столкнулся с проблемкой.. Сделал соединение с бд, доменный сервис. Пробую сделать аутентификацию. Объявляю класс LoginUser (на клиентской стороне) для проверки введенного логина и пароля. Для удобства отображения данных, делаю в датаформ'е с атрибутами. Класс имеет такой вид:
namespace BusinessApplication6
{
    public class LoginUser
    {
        [Display(Name = "Имя пользователя:")]
        public string Login { get; set; }

        [Display(Name = "Пароль:")]
        public string Password { get; set; }
    }
}

Всё хорошо. Теперь, вызываю модальное окно LoginWindow в котором имеется разметка XAML отображающая соответствующие поля. Кусок кода этого окна: ( LoginForm - датаформа с 2-мя автосгенерированными полями на основе класса LoginUser)
        public LoginUser lu { get; set; }

        public LoginWindow()
        {
            InitializeComponent();

            lu = new LoginUser();
            LoginForm.CurrentItem = lu;
            LoginForm.BeginEdit();
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            LoginForm.CommitEdit();
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            lu = null;
            LoginForm.CancelEdit();
            this.DialogResult = false;
        }


Вызов этого окна происходит так:
            var lw = new LoginWindow();
            lw.Closed += new System.EventHandler(lw_Closed);
            lw.Show();


Теперь метод вызываемый по закрытию модального окна:
        void lw_Closed(object sender, System.EventArgs e)
        {
            var usr = (LoginWindow)sender;
            if (usr.lu != null)
            {
                //теперь нужно отправить полученные данные аутентификатору
            }
        }


Собственно на этом я и встал... как делать аутентификацию не понимаю... Помогите, пожалуйста, skole. Посмотрел как происходит встроенная аутентификация - ничего не понял, разумеется... Читал уже многие источники - в 8 из 10 случаев рассказывают о ASP конфигурации. Остальные 2 это сильверлайт 3, который, разумеется, уже не актуален, и многие пространства имён и методы либо не нужны, либо куда-то спрятаны и вообще называются теперь по-другому. То есть очередной ненужный труд этих поисков. Хелп...

P.S. При вводе данных датаформ автоматически создаёт свою кнопку "ОК", как её можно убрать???
P.P.S. Брейкеры на серверной стороне не работают?? О_о
7 окт 12, 03:36    [13279524]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
Я, кстати, вижу процесс аутентификации тк: при запуске приложение соединяется с бд только с одной таблицей - имена пользователей, их ИД, права и пароли. Далее, пользователь вводит свои логин и пароль -> сервис аутентификации должен сделать поиск по пользователям из бд (а точнее из загруженного списка пользователей), найти этого пользователя, проверить соответствие пароля (пока что пароль будет чистым, чуть позже сделаю хэширование), и выдать программе: либо данные введены неверно, либо показывать пользователю контент, который соответствует его роли/правам.

Допустим есть таблица
ISN Login Password Rules
1 Admin admin adm
2 Lex lex member
3 John johny moderator

И вот, надо как-то сделать вышеуказанный алгоритм.
7 окт 12, 04:55    [13279585]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
WPF
Member

Откуда:
Сообщений: 88
Нет тут никакого алгоритма, все примитивно просто. Сначала разложи задачу на подзадачи, проверяй аутентификацию булевым методом, затем узнавай роль данного пользователя. В зависимости от роли раздавай контент. Все.
7 окт 12, 05:04    [13279588]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
WPF
Member

Откуда:
Сообщений: 88
Мыслишь верно, теперь всю эту логику изложи в коде. Понимаю, что с непривычки это сделать непросто, но надо стараться, скилы затачиваются на задачах.
7 окт 12, 05:06    [13279589]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
Урааааа! С помощью ряда кривых и частично нерабочих примерах я всё-таки кое-как сделал аутентификацию по базе данных на основе встроенной!!! Теперь буду пытаться реализовать это не в бизнес-приложении с нуля (там очень много мусора, который мне не нужен). И делов то было на самом деле на раз-два.

Первые попытки реализовать это в обычном приложении закончились ошибкой о том, что не инициализирован WebContextBase.Authentication =(

Либо просто почищу это бизнес приложение... только чистить придется очень много и очень аккуратно.

Вопрос с ходу: не потеряю ли я в безопасности если буду реализовывать это НЕ в бизнес приложении? Может быть, есть какие-то скрытые алгоритмы безопасности?

Это реально сложно - научиться этим технологиям с нуля, не имея толкового представления о механизмах этих сервисов... Но - вторые сутки насилия мозга приносят свои плоды! И, хоть их пока мало, это только начало :).
7 окт 12, 06:01    [13279598]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
А встроенный сервис регистрации удалить то не так и легко :(... Ибо он мне не нужен совершенно.
7 окт 12, 07:30    [13279612]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
Вот блин, это бизнес-приложение имеет столько ненужного, а так же недоступного, что хочется сделать свой мембершип и свою аутентификацию - но, боюсь, это уже будет не по зубам мне...
7 окт 12, 07:48    [13279617]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
Я официально заявляю что я осёл... Всё-таки нашел как сделать модуль аутентификации, хотя и над ним пришлось несколько часов пыхтеть чтобы понять нюансы. Это оказалось достаточно просто с точки зрения кодинга, после разбора приложения найденного где-то у западных друзей - с говорящим названием "Custom Authentication Sample.zip". Всё гениально и просто оказалось. Базовый функционал теперь я понимаю (вот только зачем ТАК СЛОЖНО сделано в бизнес-приложении?)

Вот только что я лично не понял, так это - зачем надо подгонять своего юзера из бд к IUser, который, как я понял, обязан иметь в себе name и password... Я-то хотел бы не держать пароль в свойстве юзера постоянно... Однако, изменив хоть что-нибудь на чууууть-чуть - всё рушится нафиг...
7 окт 12, 11:02    [13279724]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
WPF
Member

Откуда:
Сообщений: 88
Коллега, себя ослом называть не след – мы есть то, что мы едим. Вот ты и подошел к желаемому результату, теперь хочу обратить твое внимание на то, как грамотно пишутся API. Часто у MS реализация методов скрыта, делается это потому что среднестатистический западный прогер имеет сравнительно слабую подготовку. Поэтому для прогеров такого уровня существуют «решения из коробки». RIA сервис как раз и является таким коробочным решением, включил и поехал. Когда же существует иной сценарий имплементации веб-сервиса, необходимо переопределить стандартные методы. Для этого следует углубиться в стандартную реализацию, например все методы сервиса легко переопределяются в конфигурационном файле, это если нам требуется поменять транспорт или ограничения по умолчанию. Следовательно стандартные authentication & membership провайдеры тоже имеют такие возможности. Если мне память не изменяет в RIA стандартный мембершип можно поменять подобно тому, как это делается в стандартном ASP.NET исполнении, что конечно прибавит хлопот, но MSDN тебе в помощь. Кроме того, ты можешь реализовать свой собственный сервис аутентификации и подключить его в конфиге как и любую другую часть http конвейера.
7 окт 12, 13:10    [13279911]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
WPF, ну, так то оно так... спасибо за сведения. Однако, ещё не всё сделано :).

Возникли ещё вопросы по последнему достигнутому успеху:

1. На основе кастомного сервиса аутентификации (а выглядит он просто как обычный доменный сервис, наследуемый от LinqToEntitiesDomainService<MMDatabaseEntities>, IAuthentication<User>. При этом, класс User - он же во-первых, является элементом EntityModel, и, одновременно, объявляется ниже в коде, как public partial class User : IUser. Из-за этого требуется чтобы он имел обязательно поле Name (обязательно ключевое) и поле Password по меньшей мере. Я даже переименовать их не могу. Как бы мне это дело изменить или переопределить? Или же не стоит даже заморачиваться? И тупо обнулить значение Password в классе User после прохождения аутентификации.

2. Вот ещё интересный момент: как мне реализовать повторный вход пользователя, который уже прошел аутентификацию без повторного ввода пароля? Даже если я применю такой вариант аутентификации:
.Login(new LoginParameters(sUserName, sUserPassword, true, null));

Третий атрибут со значением true предполагает реализацию именно этой идеи. Однако, при обновлении страницы, аутентификация слетает. Идём дальше, в бизнес-приложении в App.xaml.cs есть очень приятный примерчик:
private void Application_Startup(object sender, StartupEventArgs e)
        {
            ...
            // Пользователь будет проходить проверку подлинности автоматически, если используется проверка подлинности Windows или в предыдущий раз был установлен флажок "Запомнить пароль".
            WebContext.Current.Authentication.LoadUser(this.Application_UserLoaded, null);
            ...
        }

ОДНАКО! При попытке получить пользователя таким образом, идёт запрос в сервис аутентификации (в моём случае далее в бд) на поиск пользователя вида "МойПК\что-то там". То есть, имя компьютера. Всё это наталкивает на мысль, что в базовом варианте предусмотрена только встроенная проверка подлинности Windows. А надо по-другому, т.к. имя компьютера моей программе абсолютно не интересно. Подскажите, как можно реализовать необходимый мне процесс?

3. Каким образом лучше всего оперировать контентом в соответствии с правами пользователей (из бд)? navigation:Frame + UriMapper (как сделано в бизнес-приложении) - или же есть более удобные способы? Он мне не нравится потому что приходится в коде конкретно указывать страницу перехода:
ContentFrame.Navigate(new Uri("/Page2", UriKind.Relative));


4. Обязательно ли использовать membership провайдер?

5. Ролевой доступ... Достаточно ли было бы сделать его "самопаленным", имея в бд ячейку со словом "admin" или "member" и, в коде C# или XAML, проверяя на соответствие выдавать соответствующий самопаленному уровню доступа контент пользователю. Надеюсь понятно написал.

Пока что всё :).
7 окт 12, 15:04    [13280222]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
WPF
Member

Откуда:
Сообщений: 88
Коллега, вижу тут полную кашу. Во-первых ознакомься со стандартными провайдерами membership (это и есть ролевой доступ) & authentication (логин) для ASP.NET. Эти провайдеры в точности копируют реализацию в SL. Режим аутентификации измени в Forms, чтобы твои пользователи логинились на входе.. Затем определись, что тебя не устраивает в стандартном провайдере этих сервисов. В большинстве случаев их достаточно, смотри внимательно материалы на http://www.asp.net/web-forms/videos/authentication
7 окт 12, 15:49    [13280351]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
WPF, окей, спасибо. Позже дам о себе знать, как ознакомлюсь с хотя бы частью материалов... И спасибо за ссылку на видеоматериал - так нагляднее, даже на английском.
7 окт 12, 17:14    [13280523]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
Mans7
Member

Откуда:
Сообщений: 70
Меня бесит что в 95% примерах, а на мсдне это все 100% используется встроенная система мембершипа, в которой есть ряд свойств - имя, пароль, почта, длина чл...на, стафф. При этом изменить этот набор нереально - нужно создавать свой мембершип с нуля если делать всё "по инструкции" через ASP Конфигуратор, в котором, вроде как, удобно создавать пользователей и роли.

Вот мне и нужен СВОЙ набор свойств, а не этот мусор..
7 окт 12, 18:09    [13280656]     Ответить | Цитировать Сообщить модератору
 Re: Silverlight соединение с БД с аутентификацией  [new]
WPF
Member

Откуда:
Сообщений: 88
Твой набор свойств сильно отличается от стандартного? Очень сомневаюсь. Ну, а если даже и так, написать собственный провайдер несложно, это же всего парочка классов.
7 окт 12, 20:21    [13280948]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить