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

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

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

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам