Эй люди, это, кажется, было обсуждением справедливо часто, но я хочу сделать простой, смягченный вопрос вокруг выполнения аутентификации с УСПОКОИТЕЛЬНЫМИ сервисами. Сценарий следующие:
Вопрос теперь состоит в том, как аутентифицировать пользователя, учетные данные которого (имя пользователя/пароль) вводятся в клиентское приложение против данных в Пользовательской системе, таким образом, что это безопасно и производительно? Ради этого вопроса предположите, что клиентское приложение является внутренним к своего рода Интранет, но приложения не будут находиться на той же машине и могут только связаться через сервис.
Я понимаю идею наличия приложения, являющегося "гиперсредой, управляемой", но нам необходимо предоставить услуги фильтрации/поиска. Например, рассмотрите ресурсы и API как указано ниже:
На основе вышеупомянутого моя идея была бы, имеют клиентское приложение, Входят в пользователя, перечисляющего, фильтруя именем пользователя. Сервис возвратит хешированный пароль и соль клиенту, клиент выполнит аутентификацию.
Мысли?
Во-первых, вы не хотите, чтобы клиент выполнял аутентификацию, так как тогда было бы тривиально написать клиент, который взламывает ваш сервис.
Вместо этого, просто используйте механизм аутентификации, такой как HTTP Basic или HTTP Digest.
Обратите внимание, что если вы используете Java, фреймворк Restlet предоставляет перехватчики, называемые Guards, которые поддерживают эти и другие механизмы. Я настоятельно рекомендую рестлет
.Пасование назад имени пользователя и соли являются ненужными и реальная угроза безопасности.
, Возможно, вы могли рассмотреть этот подход:
Сделали, чтобы клиент передал имя пользователя и пароль к серверу через Стандартная аутентификация
, сервер выбирает зашифрованный пароль для имени пользователя наряду с солью
, сервер шифрует данный пароль с помощью некоторого метода шифрования, с помощью соли для помощи алгоритму (код Ruby следует):
def User.authenticate(login, password)
ok = false
user = User.find_by_login(login)
if user
#
# user contains the salt, it isn't passed from the client
#
expected_password = hash_password(password, user.salt)
ok = (user.password == expected_password)
end
return ok
end
существует несколько мест для использования этого вида подхода, но мне нравится делать это в Стойке.
Последняя точка, сделайте все это на Подключении HTTPS
Если я правильно понимаю ваш вопрос, вы хотите реализовать универсальную службу, которая будет обрабатывать аутентификацию, так что вы можете повторно использовать его для разных приложений.
Я предлагаю взглянуть на ОАУТ , который был построен для именно этого задача домена.