Просмотрите эту статью по номеру WCF security scenarios, в которой объясняется множество лучших практик, которые вы должны принять.
Вы в основном есть три варианта для обеспечения обмена сообщениями между клиентом и сервером:
- ничего
- транспортного уровня (например, защитить все сообщения непосредственно на уровне протокола)
- сообщений уровня (например, защищать/шифровать сообщение как таковое)
Как правило, вы должны использовать безопасность на уровне транспортного уровня (уровень TCP/IP), когда вы можете быть уверены, что существует только один хоп между вашим клиентом и вашим сервисом, например. в корпоративной локальной сети за брандмауэром. Это самый быстрый - используйте netTcpBinding
в вашей корпоративной (Windows) локальной сети.
Если у вас потенциально много переходов (например, роутеры, посредники-посредники и т. Д.) - как правило, ваш сценарий интернет-и внешних клиентов - тогда безопасность на транспортном уровне больше не будет работать, поэтому вам, вероятно, придется использовать сообщение -level для шифрования и подписывания сообщения как такового, поскольку оно перемещается от клиента к службе.
Теперь речь идет только об обеспечении сообщения на своем пути.
Что касается аутентификации (зная, к кому она звонит), вы можете обычно использовать учетные данные Active Directory/Windows внутри вашей локальной сети/компании или имя пользователя/пароль для внешних клиентов (или, возможно, сертификаты для этой же цели, хотя это бит больше работы). Вы также можете представить, что анонимные пользователи, которые не говорят вам, кто они, или отклоняют их, - это зависит от вас.
Как только вы знаете, кто это вам звонит, вы можете сделать авторизацию - решив, что они могут сделать. Здесь вы обычно используете членство в Active Directory в сценариях корпоративной/локальной сети или в системе членства/роли ASP.NET в других сценариях. Или вы можете сворачивать самостоятельно - это полностью зависит от вас.
Надеюсь, что поможет немного, и вы начнете сейчас!
Marc