![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
cha0ss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.9.2009 Репутация: нет Всего: нет |
Здравствуйте, возникла необходимость подключения к WCF-сервису не через Windows-аутентификацию.
Для этого я динамически создаю binding и endpointadress, но не нашел где все таки прописывать имя пользователя и пароль под которым я хочу запустить метод.
Это сообщение отредактировал(а) cha0ss - 15.9.2009, 16:28 |
|||
|
||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
ClientCredentials Property
только вот как-то мало ты конфигуришь binding так как минимум понадобится строка
|
|||
|
||||
cha0ss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.9.2009 Репутация: нет Всего: нет |
при открытии соединения получаю следующую ошибку: {"Не удалось открыть безопасный канал, так как произошла ошибка при согласовании безопасности с удаленной стороной. Возможно, это связано с отсутствием или неправильным указанием EndpointIdentity в EndpointAddress, использованном для создания канала. Убедитесь, что EndpointIdentity, указанный или подразумеваемый в EndpointAddress, правильно идентифицирует удаленную сторону. "} пытался менять CreateDnsIdentity на CreateUpnIdentity, не помогает - в ответ все таже ошибка. |
|||
|
||||
mihryak |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
я не опоздал?
![]() впрочем, кому-нибудь ещё может пригодиться пример self-hosted wcf service'а с юзернеймовой аутентификацией, с кастомным юзерским валидатором, без сертификатов и ssl (транспортная секьюрность и секьюрность сообщений отключена), сконфиругированный кодом, а не app.config'ом (вроде бы, не забыл ничего ![]() итак, сам сервис (обычно в отдельной общей сборке)
его реализация (в самом host application)
валидатор пользователей (там же)
prorgam.cs host application'а
program.cs client apllication'а
|
||||||||||
|
|||||||||||
cha0ss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.9.2009 Репутация: нет Всего: нет |
Спасибо, это обязательно пригодится!
Я сделал по другому, в моей программе оказалось достаточным Windows-аутентификации под текущим пользователем + возможность ввести другие логин / пароль (но также под Windows-аутентификацией). |
|||
|
||||
v_enom |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
mihryak,
покажи пожалуйста, как проверяешь на сервере, правильность пароля и имени (например из базы с пользователями на сервере берешь).... я понимаю что функцией void Validate(string userName, string password) но где она вызывается? или она как-то по-особому работает, что сама все делает??? в общем где она проявляется на серваке, опиши, а? и кто возвращает ошибку, в случае неверной валидации???? и немного не понятна эта запись
где она вызывается? (я создаю wcf сервер через окна IDE ). у меня есть файлы WcfUploaderIService.cs(с контрактами) и WcfUploaderService.cs (с кодом) где писать все это добро
и еще... а как на практике реализуется открытие части функций с помощью
т.е. что надо выставить/прописать в client application (а может еще и в конфиге и сервере), чтобы все, кто не авторизовались по валидации все же могла что-то там делать....например только "смотреть таблицу из бд" и т.д. Это сообщение отредактировал(а) v_enom - 24.9.2009, 00:44 |
||||||
|
|||||||
mihryak |
|
||||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
Првильность проверяется на усмотрение пишущего кастомный валидатор (база данных, другой аутентификационный сервис и т.д.). Если креды плохие, то этот метод должен выкинуть SecurityTokenException. Для использования кастомного валидатора нужно указать, что предполагается его использование
и задать сам экземпляр валидатора
Сам метод класса вызывается автоматически инфраструктурой WCF, всё что требуется - просто его указать Вообще, кастомные валидаторы не рекомендуются, см. здесь, лучше прикрутить MembershipProvider Зависит от того, так ты стартуешь сервис, кто его хостит. Если как у меня (self-hosted wcf service) - то либо в prorgam.cs прописать мой код, либо в app.config, а если хостит IIS, то, насколько знаю, только конфигом
Это уже относится не к аутентификации (принятие или непринятие пользователя), а к авторизации (раздача уже принятому пользователю его прав). См. всё ту же ссылку с best practices. Для кастомной проверки ролей (не рекомендуется) 1. пометить метод атрибутом
2. сделать ещё один класс-валидатор
3. сконфигурить хост, указав, что надо использовать его
Каждый частный случай реализации аутентификации-авторизации требует отдельного рассмотрения, то, что у меня - лишь демо-пример, причём не лучший |
||||||||||||
|
|||||||||||||
v_enom |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
mihryak,
спасибо, поковыряв твои примеры и книги можно уже разобраться, как сделать валидацию... |
|||
|
||||
NikeDeForest |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 15.9.2007 Репутация: нет Всего: 2 |
А почему проверка ролей не рекомендуется? И что рекомендуется тогда, заявки (claims)?
--------------------
Еще один вопрос ... |
|||
|
||||
anikss |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.11.2005 Где: Москва Репутация: нет Всего: нет |
Здравствуйте! Проверил ваш пример, проверка пароля не производитс, и при указании неправильного пароля операция все равно выполняется. Подскажите пожалуйста, как же все-таки сделать аутентификацию по логину и паролю без сертификата? |
|||
|
||||
EagleOne |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 20.11.2009 Репутация: нет Всего: 1 |
1. Ага, не производится, потому что в приведенном примере контекст безопасности не будет содержать идентификационной информации....
Можно в коде приведенном выше заменить
на
Вот тогда идентификационная информацию уйдет в http. В этом случае при неправильном логине или пароле будет вываливаться, что HTTP запросы запрещены для данной схемы проверки подлинности...
2. Так чё бы ей не выполняться то... Аутентификация это не авторизация... А чтобы определять выполняться для определенного пользователя тот или иной метод, нужно писать авторизацию на основе ролей или заявок... ------------------------------------------------------------------------------------------------------------------- А теперь собсно мой вопрос к гуру WCF-а и безопасности в нем ![]() У меня случай такой: Пользователи на мой WCF-сервис попадают через инет по логину и паролю (т.е. все что должно требоваться от пользвателя это тока знание логина и пароля...). Данные должны шифроваться - т.е. пользователь через http аналайзер не должен увидеть ни данных, ни логина и пароля... Авторизация должна быть на основе ролей.... Использовать поставщика ролей ASP.NET никакой возможности нет Кастомный провайдер ролей писать тоже очень не желательно... Т.е. основной преемлимый вариант - писать кастомные методы для сопоставления пользователя ролям (с этим кстате проблем нет). Проблема в том как передать идентификационную информацию сервису - в UserNameValidator, причем так чтоб её другие не сперли... Какую привязку лучше для этого использовать, как её конфигурировать, как сделать шифрование... ? Смотрел уже и MSDN и в других источниках... - информация преподнесена ацтой как (это я про MSDN и про ReMIX), да ещё и в примерах ошибки... :( Это сообщение отредактировал(а) EagleOne - 27.11.2009, 22:02 |
||||||||||
|
|||||||||||
Medic |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 6.6.2005 Репутация: нет Всего: нет |
А как можно UserName/Password авторизацию реализовать при basicHttpBinding (SilverLight только его поддерживает)?
WCF сервис хостится вне IIS. Это сообщение отредактировал(а) Medic - 1.3.2010, 06:12 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |