| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > Проблема с авторизацией клиента в WCF-сервисе |
| Автор: cha0ss 15.9.2009, 16:27 | ||
| Здравствуйте, возникла необходимость подключения к WCF-сервису не через Windows-аутентификацию. Для этого я динамически создаю binding и endpointadress, но не нашел где все таки прописывать имя пользователя и пароль под которым я хочу запустить метод.
|
| Автор: mihryak 15.9.2009, 17:06 | ||
| http://msdn.microsoft.com/ru-ru/library/ms553830.aspx только вот как-то мало ты конфигуришь binding так как минимум понадобится строка
|
| Автор: cha0ss 16.9.2009, 11:14 | ||
при открытии соединения получаю следующую ошибку: {"Не удалось открыть безопасный канал, так как произошла ошибка при согласовании безопасности с удаленной стороной. Возможно, это связано с отсутствием или неправильным указанием EndpointIdentity в EndpointAddress, использованном для создания канала. Убедитесь, что EndpointIdentity, указанный или подразумеваемый в EndpointAddress, правильно идентифицирует удаленную сторону. "} пытался менять CreateDnsIdentity на CreateUpnIdentity, не помогает - в ответ все таже ошибка. |
| Автор: mihryak 21.9.2009, 15:52 | ||||||||||
| я не опоздал? впрочем, кому-нибудь ещё может пригодиться пример self-hosted wcf service'а с юзернеймовой аутентификацией, с кастомным юзерским валидатором, без сертификатов и ssl (транспортная секьюрность и секьюрность сообщений отключена), сконфиругированный кодом, а не app.config'ом (вроде бы, не забыл ничего итак, сам сервис (обычно в отдельной общей сборке)
его реализация (в самом host application)
валидатор пользователей (там же)
prorgam.cs host application'а
program.cs client apllication'а
|
| Автор: cha0ss 22.9.2009, 09:03 |
| Спасибо, это обязательно пригодится! Я сделал по другому, в моей программе оказалось достаточным Windows-аутентификации под текущим пользователем + возможность ввести другие логин / пароль (но также под Windows-аутентификацией). |
| Автор: v_enom 24.9.2009, 00:33 | ||||||
| mihryak, покажи пожалуйста, как проверяешь на сервере, правильность пароля и имени (например из базы с пользователями на сервере берешь).... я понимаю что функцией void Validate(string userName, string password) но где она вызывается? или она как-то по-особому работает, что сама все делает??? в общем где она проявляется на серваке, опиши, а? и кто возвращает ошибку, в случае неверной валидации???? и немного не понятна эта запись
где она вызывается? (я создаю wcf сервер через окна IDE ). у меня есть файлы WcfUploaderIService.cs(с контрактами) и WcfUploaderService.cs (с кодом) где писать все это добро
и еще... а как на практике реализуется открытие части функций с помощью
т.е. что надо выставить/прописать в client application (а может еще и в конфиге и сервере), чтобы все, кто не авторизовались по валидации все же могла что-то там делать....например только "смотреть таблицу из бд" и т.д. |
| Автор: v_enom 24.9.2009, 20:54 |
| mihryak, спасибо, поковыряв твои примеры и книги можно уже разобраться, как сделать валидацию... |
| Автор: NikeDeForest 15.10.2009, 07:38 |
| А почему проверка ролей не рекомендуется? И что рекомендуется тогда, заявки (claims)? |
| Автор: anikss 10.11.2009, 22:49 | ||
Здравствуйте! Проверил ваш пример, проверка пароля не производитс, и при указании неправильного пароля операция все равно выполняется. Подскажите пожалуйста, как же все-таки сделать аутентификацию по логину и паролю без сертификата? |
| Автор: EagleOne 27.11.2009, 21:51 | ||||||||||
1. Ага, не производится, потому что в приведенном примере контекст безопасности не будет содержать идентификационной информации....
Можно в коде приведенном выше заменить
на
Вот тогда идентификационная информацию уйдет в http. В этом случае при неправильном логине или пароле будет вываливаться, что HTTP запросы запрещены для данной схемы проверки подлинности...
2. Так чё бы ей не выполняться то... Аутентификация это не авторизация... А чтобы определять выполняться для определенного пользователя тот или иной метод, нужно писать авторизацию на основе ролей или заявок... ------------------------------------------------------------------------------------------------------------------- А теперь собсно мой вопрос к гуру WCF-а и безопасности в нем У меня случай такой: Пользователи на мой WCF-сервис попадают через инет по логину и паролю (т.е. все что должно требоваться от пользвателя это тока знание логина и пароля...). Данные должны шифроваться - т.е. пользователь через http аналайзер не должен увидеть ни данных, ни логина и пароля... Авторизация должна быть на основе ролей.... Использовать поставщика ролей ASP.NET никакой возможности нет Кастомный провайдер ролей писать тоже очень не желательно... Т.е. основной преемлимый вариант - писать кастомные методы для сопоставления пользователя ролям (с этим кстате проблем нет). Проблема в том как передать идентификационную информацию сервису - в UserNameValidator, причем так чтоб её другие не сперли... Какую привязку лучше для этого использовать, как её конфигурировать, как сделать шифрование... ? Смотрел уже и MSDN и в других источниках... - информация преподнесена ацтой как (это я про MSDN и про ReMIX), да ещё и в примерах ошибки... :( |
| Автор: Medic 1.3.2010, 06:10 |
| А как можно UserName/Password авторизацию реализовать при basicHttpBinding (SilverLight только его поддерживает)? WCF сервис хостится вне IIS. |