Безопасность WCF: имя пользователя, пароль и еще один параметр

В нашем проекте все сервисы WCF защищены опцией wsHttpBinding (TransportWithMessageCredential, UserName).

Это работает нормально, но теперь нам нужно реализовать безопасность с еще одним параметром (ClientId).

Когда служба WCF получает вызов, она не знает, что такое БД вызова (где проверить имя пользователя и пароль), поэтому сначала она должна перейти в «основную» базу данных нашей компании (где хранятся все клиенты). ) и получить строку подключения по ClientId.

Как мы можем реализовать это?


person Igor    schedule 30.01.2013    source источник


Ответы (2)


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

Я не мог найти другого способа элегантно передать информацию.

Просто проанализируйте эту информацию в своей реализации AuthorizationPolicy.

person Andre Luus    schedule 30.01.2013
comment
Это действительно элегантное решение. Домен\имя пользователя в мире Windows является конкретным примером этого, который используется повсеместно. - person tallseth; 30.01.2013

Подобные проблемы я решал с помощью MessageInspectors. По сути, вы создаете IClientMessageInspector, который добавляет идентификатор клиента в заголовки сообщений, и IDispatchMessageInspector, который считывает идентификатор клиента из этого заголовка и сохраняет его в соответствующем месте (например, пользовательская реализация IPrincipal, установленная как Thread.CurrentPrincipal).

person tallseth    schedule 30.01.2013