WCF: Handshake
От: Аноним  
Дата: 01.11.10 10:10
Оценка:
Здравствуйте,

Начинаю изучать WCF и возникло несколько вопросов:

1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика. Насколько я понял погуглив, это возможно. Вроде как называется transport level
и стоит по умолчанию у tcp.
2) Можно ли как-то использовать handshake аутентификацию для передачи пароля? Т.е. у меня есть какой-то shared-secret. Клиент запрашивает аутентификацию,
сервер шлет ему случайный challenge. Клиент шифрует challenge использую свой shared-secret и шлет серверу. Сервер в свою очередь сам делает тоже самое
и сравнивает ответы. Возможно ли?
3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?
4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2))
хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?

Спасибо!
Re: WCF: Handshake
От: adontz Грузия http://adontz.wordpress.com/
Дата: 01.11.10 10:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика. Насколько я понял погуглив, это возможно. Вроде как называется transport level и стоит по умолчанию у tcp.


transport level security

А>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля? Т.е. у меня есть какой-то shared-secret. Клиент запрашивает аутентификацию, сервер шлет ему случайный challenge. Клиент шифрует challenge использую свой shared-secret и шлет серверу. Сервер в свою очередь сам делает тоже самое и сравнивает ответы. Возможно ли?


Не проще TLS использовать?

А>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?


Исключение в общем случае не обравает связь.

А>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2)) хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?


Можно об этом по-подробнее?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: WCF: Handshake
От: Аноним  
Дата: 01.11.10 13:19
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика. Насколько я понял погуглив, это возможно. Вроде как называется transport level и стоит по умолчанию у tcp.


A>transport level security

Спасибо

А>>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля? Т.е. у меня есть какой-то shared-secret. Клиент запрашивает аутентификацию, сервер шлет ему случайный challenge. Клиент шифрует challenge использую свой shared-secret и шлет серверу. Сервер в свою очередь сам делает тоже самое и сравнивает ответы. Возможно ли?


A>Не проще TLS использовать?

А можно по подробнее? Я так понял это использую сертификаты и HTTP?

А>>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?


A>Исключение в общем случае не обравает связь.

Ок, а как отсоеденить его в общем случае?

А>>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2)) хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?


A>Можно об этом по-подробнее?


[ServiceContract]
interface IService1
{
    [OperationContract]
    IService2 GiveNext();
}

[ServiceContract]
interface IService2
{
    [OperationContract]
    string DoStuff(int);
}


Что-бы дотянуться до IService2 можно было лишь позвав GiveNext() у IService1?
Re[3]: WCF: Handshake
От: adontz Грузия http://adontz.wordpress.com/
Дата: 01.11.10 13:56
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>Не проще TLS использовать?

А>А можно по подробнее? Я так понял это использую сертификаты и HTTP?

Да. Правда не думаю что только для HTTP, хотя и не уверен.

A>>Исключение в общем случае не обравает связь.

А>Ок, а как отсоеденить его в общем случае?

Позвать System.ServiceModel.ClientBase<>.Close(). Обрывать соединение с сервера ИМХО плохая идея.

A>>Можно об этом по-подробнее?

А>
А>[ServiceContract]
А>interface IService1
А>{
А>    [OperationContract]
А>    IService2 GiveNext();
А>}
А>[ServiceContract]
А>interface IService2
А>{
А>    [OperationContract]
А>    string DoStuff(int);
А>}
А>

А>Что-бы дотянуться до IService2 можно было лишь позвав GiveNext() у IService1?

Не думаю что подобное возможно в описанном виде. Я бы реализовал с использованием сессии.
[ServiceContract]
interface IService
{
    [OperationContract]
    void CreateNext();

    [OperationContract]
    string DoStuff(int);
}


Внутри может быть реализованно как вы хотите.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: WCF: Handshake
От: Аноним  
Дата: 01.11.10 14:20
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>>>Не проще TLS использовать?

А>>А можно по подробнее? Я так понял это использую сертификаты и HTTP?

A>Да. Правда не думаю что только для HTTP, хотя и не уверен.


A>>>Исключение в общем случае не обравает связь.

А>>Ок, а как отсоеденить его в общем случае?

A>Позвать System.ServiceModel.ClientBase<>.Close(). Обрывать соединение с сервера ИМХО плохая идея.


A>>>Можно об этом по-подробнее?

А>>
А>>[ServiceContract]
А>>interface IService1
А>>{
А>>    [OperationContract]
А>>    IService2 GiveNext();
А>>}
А>>[ServiceContract]
А>>interface IService2
А>>{
А>>    [OperationContract]
А>>    string DoStuff(int);
А>>}
А>>

А>>Что-бы дотянуться до IService2 можно было лишь позвав GiveNext() у IService1?

A>Не думаю что подобное возможно в описанном виде. Я бы реализовал с использованием сессии.

A>
A>[ServiceContract]
A>interface IService
A>{
A>    [OperationContract]
A>    void CreateNext();

A>    [OperationContract]
A>    string DoStuff(int);
A>}
A>


A>Внутри может быть реализованно как вы хотите.

Пасиб
Re: WCF: Handshake
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.11.10 22:24
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика


Можно. Самый интероперабельный — TLS. Самый простой в использовании, наверное — WindowsStreamingSecurity. Хуже того, в WCF зашита такая фича — если нет шифрования канала или сообщения, то не передаются критичные к просмотру credentials (username/password например).

А>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля?


Можно. Схема обработки claim sets изначально на это заточена. Подробности в документации и вроде бы был стандартный пример на эту тему. Ну и можешь еще исходники стандартных аутентификаторов поглядеть — у многих хендшейк используется.

А>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?


Не очень понятен вопрос.

А>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2))

А>хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?

Опять же не очень понятен вопрос. Если речь о том, чтобы эти интерфейсы были у одного экземпляра сервиса — без проблем. Указываешь, что сервис синглтон или на сессию, и регистрируешь для него несколько эндпоинтов с разными интерфейсами.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
Re[4]: WCF: Handshake
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.11.10 22:24
Оценка:
Здравствуйте, adontz, Вы писали:

А>>А можно по подробнее? Я так понял это использую сертификаты и HTTP?


A>Да. Правда не думаю что только для HTTP, хотя и не уверен.


TLS тем и отличается от SSL 2.0, что не привязан к HTTP.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
Re[5]: WCF: Handshake
От: Jolly Roger  
Дата: 02.11.10 02:49
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>TLS тем и отличается от SSL 2.0, что не привязан к HTTP.


А SSL 2.0 был привязан к HTTP? А в чём это выражалось?
"Нормальные герои всегда идут в обход!"
Re[2]: WCF: Handshake
От: Аноним  
Дата: 02.11.10 12:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:
Cпасибо за развернутый ответ!

AVK>Здравствуйте, <Аноним>, Вы писали:



А>>1) Можно ли использовать WCF + Tcp binding + полное шифрование трафика


AVK>Можно. Самый интероперабельный — TLS. Самый простой в использовании, наверное — WindowsStreamingSecurity. Хуже того, в WCF зашита такая фича — если нет шифрования канала или сообщения, то не передаются критичные к просмотру credentials (username/password например).

А можно ссылку? Я погуглил, че то видать плохо гуглил . Можно ли использовать пароли не связанные с Windows? Что-то типа shared secret?
Правильно ли я понимаю что шифрование уже есть по умолчанию?

А>>2) Можно ли как-то использовать handshake аутентификацию для передачи пароля?


AVK>Можно. Схема обработки claim sets изначально на это заточена. Подробности в документации и вроде бы был стандартный пример на эту тему. Ну и можешь еще исходники стандартных аутентификаторов поглядеть — у многих хендшейк используется.

Здесь посмотрю документацию.

А>>3) Как моментально отсобачить клиента, достаточно ли кинуть исключение на сервере? (для session based) Безопасно ли показывать причину клиенту (сам эксепшен)?


AVK>Не очень понятен вопрос.

Как отсоеденить клиента от сервера. Допустим серверу он показался подозрительным

А>>4) Хочу сделать n интерфейсов, т.е. изначально клиент может присоединятся только к 1-му интерфейсу. После некоторых вызовов у этого интерфейса по некой логике (например 2))

А>>хочу чтобы клиенту стал доступен 2-ой интерфейс и т.д. как можно организовать такое?

AVK>Опять же не очень понятен вопрос. Если речь о том, чтобы эти интерфейсы были у одного экземпляра сервиса — без проблем. Указываешь, что сервис синглтон или на сессию, и регистрируешь для него несколько эндпоинтов с разными интерфейсами.


Что-то в таком духе?

[ServiceContract]
interface IService1
{
    [OperationContract]
    IService2 GiveNext();
}

[ServiceContract]
interface IService2
{
    [OperationContract]
    string DoStuff(int);
}
Re[3]: WCF: Handshake
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.10 17:21
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А можно ссылку?


На что? Это все в MSDN описано, причем подробно.

А> Можно ли использовать пароли не связанные с Windows?


Можно.

А> Что-то типа shared secret?


Можно.

А>Правильно ли я понимаю что шифрование уже есть по умолчанию?


По умолчанию — понятие сложное, но в стандартных конфигурация обычно шифрования нет — хотя бы потому что для TLS требуются сертификаты.

AVK>>Не очень понятен вопрос.

А>Как отсоеденить клиента от сервера. Допустим серверу он показался подозрительным

Постоянное соеднение обычно и не устанавливается. Т.е. просто режектишь запрос и все.

AVK>>Опять же не очень понятен вопрос. Если речь о том, чтобы эти интерфейсы были у одного экземпляра сервиса — без проблем. Указываешь, что сервис синглтон или на сессию, и регистрируешь для него несколько эндпоинтов с разными интерфейсами.


А>Что-то в таком духе?


А>
А>[ServiceContract]
А>interface IService1
А>{
А>    [OperationContract]
А>    IService2 GiveNext();
А>}

А>[ServiceContract]
А>interface IService2
А>{
А>    [OperationContract]
А>    string DoStuff(int);
А>}
А>


IService2 возвращать в WCF нельзя, это не ремоутинг. Можно вернуть EndpointAddress, но лучше тебе перепроектировать свои интерфейсы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.