Ограничить методы службы WCF от несанкционированного (нежелательного) доступа пользователя - PullRequest
0 голосов
/ 19 мая 2011

Мне интересно, как я могу ограничить некоторые методы от несанкционированного доступа пользователей. Предположим, у меня есть служба WCF со следующим контрактом:

int Login(string username, string password);
Invoice[] GetCustomersInvoices(int customerId);

Пользователь должен действовать следующим образом:

  1. Авторизуйтесь, чтобы проверить сервис и получить его custumerId
  2. получить его счета, вызвав соответствующий метод с его customerId

Ну, это может быть глупый вопрос, но что, если идентификатор customerA равен 23, но почему-то customerA знает идентификатор customerB, а это 42. Теперь customerA может читать секретные данные счета-фактуры customerB ... Что я мог сделать лучше всего, чтобы избежать этого?

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Ваш нынешний подход к методам вызова будет работать только в том случае, если вы сможете реализовать безопасный (постоянный) канал между клиентом и сервером, используя SSL или любой другой подобный режим (типичный сценарий - «Выпечка платежей»)

ИтакIMO, вам нужно реализовать аутентификацию пользователя внутри метода (без отдельных вызовов).т. е. вы должны передать идентификатор пользователя и пароль вместе с invoiceid методу GetCustomersInvoices (), и внутри него вам нужно аутентифицировать пользователя и извлечь данные.

Следующее решение для такого сценария:

  1. Реализация ваших собственных проверок пароля имени пользователя ( custom useratathentication ), которые сначала аутентифицируют пользователя, а затем вызывают указанный метод.Поскольку это произойдет в одном запросе, это решит вашу проблему.Типичный вызов метода обслуживания будет выглядеть следующим образом:

     Service.UserName = "abc"
     Service.Password = "***"
     Service.GetInvoiceDetails(1233)
    
  2. Вы можете использовать Message Headers и Body для передачи пользовательских значений, веб-сервисы поддерживают такой сценарий, когдаВы можете передавать зашифрованные данные в заголовках SOAP.

  3. В качестве альтернативы вы также можете использовать сертификаты, но они не бесплатны.

В общем, вы можетеперейдите по следующим ссылкам, чтобы получить больше информации о различных видах безопасности, поддерживаемых WCF,

http://msdn.microsoft.com/en-us/library/ms731925.aspx

1 голос
/ 19 мая 2011

Вы не должны использовать один идентификатор для идентификации кого-либо.Есть много способов включить authn / authz в WCF, мне нравится статья на http://msdn.microsoft.com/en-us/magazine/cc948343.aspx для хорошего введения в некоторые способы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...