2009-08-10 2 views
1

WCF имеет богатую модель безопасности, я надеюсь, что все согласятся на это как данность. Недавно я столкнулся с ситуацией, когда наши клиентские приложения (приложения на основе WCF, которые используют учетные данные пользователя в домене), нуждались в общении с услугами, которые нам приходилось развертывать в центр обработки данных за пределами нашего домена и управления. Следовательно, это нарушило нашу единую модель входа, и я хотел бы знать, имел ли кто-либо из вас какой-либо успех в распространении модели безопасности на службы за пределами домена.Какой подход можно использовать для расширения безопасности WCF за пределами текущего домена?

Наша идентичная модель основана на классах IIdentity и IPrincipal (а не на WindowsIdentity/WindowsPrincipal), поэтому использование альтернативной реализации идентично. Насколько я понимаю, у меня нет ответа, и я надеюсь, что вы это сделаете. Единственное решение, с которым я столкнулся, требует от клиента аутентификации в нашем домене таким же образом, как и сейчас. В рамках аутентификации им будет предоставлен сертификат X.509, подписанный нашим центром сертификации (которому будет доверять центр обработки данных). Сертификаты будут размещены в хранилище сертификатов (я считаю, что есть тот, который связан с .NET, но я не понимаю, как его можно использовать в среде, где пользователи иногда перемещаются) и создаются/предоставляются пользователю по запросу.

Буду признателен за любые отзывы и/или идеи.

Edit:

У нас есть услуги, которые еще проживают в нашем центре обработки данных в дополнение к удаленным центром данных. Я хотел бы предоставить решение, для которого требуется только один сингл (и fwiw, наши пользователи должны вводить свое имя пользователя и пароль каждый раз при запуске этого приложения).

ответ

0

Если у вас есть более или менее двухточечные запросы между несколькими участниками, например, в среде B2B, тогда сертификаты, безусловно, подходят. Все работает автоматически - как только вы все правильно настроите, конечно! :-)

В принципе, у вашего сервиса будет сертификат для аутентификации, и у клиента также будет сертификат, который будет отправлен службе и будет аутентифицировать клиентов в отношении этой услуги. На стороне сервера вы сможете подключиться к ServiceSecurityContext.Current.PrimaryIdentity, чтобы получить доступ к вызывающему абоненту IIdentity.

Для получения дополнительной информации см эти ресурсы:

Надеюсь, это поможет!
Marc

+0

Определенно помогает. Любые мысли о том, как я могу связать сертификат с аутентифицированным пользователем. Имейте в виду, что пользователь должен войти в систему со своими учетными данными домена, у меня нет проблем с использованием сертификата для аутентификации с помощью удаленной службы. Часть моего зависания управляла отношениями между аутентифицированными доменными учетными данными и сертификатом. Думал? – Ajaxx

+0

У вас есть в основном два варианта: (1) создать пользователей Windows на вашем конце и сопоставить сертификат с локальным пользователем Windows и аутентифицировать этот путь, или (2) полагаться только на сертификат - если пользователь представляет этот сертификат, он аутентифицирован. –

+0

Или (3) - вы также можете создавать индивидуальные сертификаты для каждого пользователя (который работает нормально, если у вас ограниченное количество пользователей) и установить их «Имя субъекта» (в их сертификате) на определенное имя, а затем проверить свои кода против списка допустимых пользователей - что-то вроде этого. –