Необходимо аутентифицировать пользователей через службу WCF, которая подключена к базе данных - PullRequest
2 голосов
/ 26 сентября 2011

Я все больше разочаровываюсь в правильной аутентификации. Обычно я использую термины, с которыми я не знаком, поэтому ответчики неправильно понимают мои вопросы. Это не помогло, но это связано со многими реализациями.

Так что теперь я попытаюсь объяснить факты и требования, связанные с моим проектом, чтобы я мог получить указатель на хорошее решение.

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

Одним из внешних проектов является веб-сайт asp.net MVC 3, который пользователи будут использовать для входа в систему и тому подобное. Теперь по умолчанию в таком проекте используется некий SQlMembership, который в данном случае не подходит, поскольку этот сайт не подключен к базе данных (это может быть даже не база данных MSQL).

Вот реализации, на которые я смотрел, но не мог понять, как правильно их использовать.

1) Напишите свой собственный MembershipProvider в проекте MVC, который запросит WebService для проверки. Здесь я имею в виду, что он просто вызовет некоторые методы для всех своих нужд. Не нравятся проблемы безопасности, решение на стороне клиента.

2) Validata, используя сервисную сторону MembershipProvider, но тогда мне придется отправлять пароль userName с каждым действием, и я не могу сохранить пароль по соображениям безопасности.

3) Затем я обнаружил нечто, называемое WCF authenticationService http://msdn.microsoft.com/en-us/library/system.web.applicationservices.authenticationservice.aspx, и мне показалось, что это то, что мне нужно, но у меня проблемы с пониманием, как это работает. Я не хочу, чтобы это было частью моего служения, но, похоже, это отдельное служение. Кроме того, на самом деле не объясняется, как он выполняет аутентификацию (мне нужно иметь собственную аутентификацию на основе моей таблицы, а не какую-то таблицу по умолчанию, созданную для меня). Вот сообщение Должна ли аутентификация быть в отдельном сервисе для wcf? с той же проблемой, что я не знаю, как ее решить.

Может ли служба аутентификации WCF быть для меня подходящим инструментом?

Можете ли вы ответить на этот вопрос для тех, кто не знает терминологию asp.net, веб или службы?

EDIT

Вот одно из решений, на которое я надеялся, но не уверен, существует ли оно.

Служба WCF предоставляет доступ к MembershipProvider, RoleProvider, ProfileProvider, которые определены в службе.

В файле MVC web.config в элементе members \ provider \ add добавляется членство MembershipProvider вместе с конечной точкой службы. То же самое с RoleManager и т. Д.

Поэтому, когда я вызываю MembershipProvider в проекте MVC для проверки пользователя, он автоматически вызывает службу и проверяет там, а когда это происходит с атрибутом Authorize, он также автоматически проверяет RoleProvider в службе.

Однако я также хотел бы ограничить сами вызовы службы, даже если они находятся внутри метода атрибута [Authorized], чего не может быть в других клиентах, которые ссылаются на веб-службу. Было бы приятно, если бы при поступлении вызова с веб-сайта служба автоматически получала доступ к cookie-файлу forms.authentication.

1 Ответ

1 голос
/ 26 сентября 2011

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

  • Если вы авторизуетесь при входе пользователя в систему, вы можете реализовать свой собственный MembershipProvider, иметь учетные данные для запроса на обслуживание и вернуть аутентифицированного пользователя.
  • После аутентификации вы можете назначить каждому пользователю GUID. Этот GUID является идентификатором, который будет перемещаться с каждым сообщением (закодированным в заголовке сообщения) и проверять пользователя для вызова метода обслуживания.
  • Это не относится к транспортной безопасности, которую следует настроить, если вы хотите, чтобы ваше сообщение было защищенным по сети, но это другой вопрос, не связанный с аутентификацией.

Надеюсь, это поможет вам. Я попытался сделать это как можно менее техническим и не учел слишком сложного. Надеюсь, это поможет как-то ...

...