2014-12-27 3 views
1

Я только начал работать с wcf-сервисом, создав веб-приложение, чтобы использовать мой сервис. Я сделал этот токен на основе i, передавая токен в каждом запросе, а затем проверял этот токен на каждый запрос из базы данных, что он действителен или нет. Я думаю, что это нехорошо посылать дополнительный запрос db каждый раз. Итак, возможно ли аутентифицировать пользователя в первый раз, когда он входил в систему или сначала делал запрос на обслуживание, а после этого до тех пор, пока сеанс не оставит все мои запросы работой с токеном?Пропустить токен аутентификации на wcf один раз

Я искал в google, но каждый рассказывал, как выполнять аутентификацию с помощью службы.

+0

Какой знак вы передаете службу? – khlr

+0

его просто случайная строка, сгенерированная при создании пользователя – Ancient

ответ

0

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

Другими словами, создайте токен из имени пользователя/приложения, даты выпуска и/или даты истечения срока действия, зашифруйте его, и у вас есть автономный токен, который не нуждается в поиске базы данных для проверки.

Для удобства шифрования MachineKey можно использовать

http://msdn.microsoft.com/en-us/library/system.web.security.machinekey%28v=vs.110%29.aspx

примечание стороны - это как форма аутентификации/сеанс модули аутентификации работа. У вас есть файлы cookie (токены), содержащие данные аутентификации. Вы можете подумать о переходе на них.

Edit: пример вы спрашиваете:

// create token 
string username = "foo"; 
string token = Convert.ToBase64String(MachineKey.Protect( 
        Encoding.UTF8.GetBytes(username))); 

// get username out of token 
string token = ....; 
string username = Encoding.UTF8.GetString(MachineKey.Unprotect( 
        Convert.FromBase64String(token))); 
+0

Можете ли вы привести пример, я не понял – Ancient

+0

Я отредактировал свой ответ с помощью базового примера, который должен дать вам представление о том, как создавать собственные жетоны. –

+0

и делать то, что после выхода из токена, как я могу проверить, что это настоящий клиент, который должен потреблять мой сервис, даже в этой ситуации мне нужно вызвать базу данных. Итак, что можно сделать, объясните, пожалуйста, – Ancient

0

Проверка маркера Auth с базой данных по каждому запросу, вероятно, плохая идея. То, что обычно используется в качестве токена, это текущий пользовательский пользователь, но сериализованный и зашифрованный. Токен генерируется и возвращается клиенту при входе в систему. Затем по каждому запросу вы передаете токен службе, которая затем дает вам возможность десериализовать ее и заполнять файл System.Threading.Thread.CurrentPrincipal без обратного перехода к БД.

Проверить эти SO ответы на более глубокое

  1. Delivering a JWT SecurityToken to a WCF client
  2. How to use Microsoft JWT Token Handler to secure webHttpBinding based WCF service
Смежные вопросы