Должны ли службы запрашивать учетные данные при каждом запросе? - PullRequest
4 голосов
/ 06 августа 2010

Интересно, какой метод аутентификации оптимален для сервисов и веб-сервисов:

  1. пользователь / пароль отправляется при каждом запросе
  2. пользователь / пароль отправляется один раз для получения кода аутентификациикоторые будут отправляться на каждый запрос

Есть ли альтернатива?Что лучше?Почему?

Ответы [ 3 ]

5 голосов
/ 06 августа 2010

Зависит от протокола.

Если запросы на обслуживание находятся в незашифрованном виде (http), возможно, вы захотите рассмотреть безопасную (https) транзакцию входа в систему, которая дает вам токен ограниченного времени для авторизации.будущие запросы (сессионный cookie, по сути).Тогда, по крайней мере, перехватчики не получат учетные данные, которые будут работать вечно, только в течение ограниченного периода.

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

Если вас не волнует безопасность, я бы даже не использовал имя пользователя / пароль, просто ключ API.Суммирует то же самое, но если пользователь не выберет его, то, по крайней мере, он не будет похож ни на один из своих других паролей, поэтому он не повлияет на что-либо еще при краже.

Есливы достаточно заботитесь о безопасности, чтобы все было сделано по протоколу https, тогда на самом деле не имеет большого значения, какой механизм идентификации вы используете, AFAIK.Так что сделайте что-нибудь простое.

Наконец, вы можете заботиться о безопасности аутентификации, но не о секретности самих запросов.Таким образом, вы не возражаете против подслушивающих, видящих данные в полете, вы просто не хотите, чтобы они могли выдавать собственные запросы (или подделывать ответы).В этом случае вы могли бы подписать запросы (и ответы), используя пару открытых / закрытых ключей или общий секретный ключ с HMAC.Это может быть (или не может) быть проще в настройке и с меньшей пропускной способностью, чем SSL.Остерегайтесь повторных атак.

0 голосов
/ 06 августа 2010

Стив Джессоп разъяснил мне кое-что:

  1. если учетные данные запомнены, я должен предоставить временный куки-файл аутентификации после их получения,

  2. но если учетные данные хранятся в цифровом виде, тогда я должен использовать только ключ API, потому что любому, кто может получить доступ к хранилищу учетных данных, не потребуется доступ к cookie

0 голосов
/ 06 августа 2010

Оптимально вы думаете о производительности? Я бы посоветовал отправлять учетные данные и проверять подлинность при каждом запросе, если только вы не сочтете это узким местом. SSL совсем не достаточно, он только обеспечивает шифрование и аутентификацию веб-сервиса. Но подумайте об аутентификации клиента (здесь может помочь сертификат клиента) и авторизации, может быть, не всем пользователям веб-сервиса не разрешено вызывать все методы, и все вызовы методов должны регистрироваться для аудита. В этом случае личность пользователя должна быть представлена ​​для каждого вызова.

Я занимаюсь разработкой и обслуживанием веб-службы базовой системы на основе SOA, разработанной в WCF, которая выполняет проверку подлинности и авторизацию для клиентов на основе .Net с использованием идентификатора Windows и использует двустороннюю проверку подлинности сертификатов на клиентах Java, и у меня нет проблем с производительностью.

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