У меня есть одна проблема с доверием, которое вы положили на токен. Этот токен может быть украден, даже если на нем есть TTL. Пара вещей, которые вы можете сделать, аутентифицировать с каждым запросом или сопоставлять токен с IP и портом (иначе это соединение). Таким образом, его нельзя украсть. Если это становится слишком сложным, просто требуйте учетные данные с каждым запросом.
При аутентификации пользователя обязательно соедините свои пароли int DB. Посмотрите, как правильно хранить пароли в БД.
Не у вас должен быть предоставлен пароль. Вместо этого пароль должен использоваться для шифрования дайджеста.
Еще одна вещь, которую следует учитывать - аутентификация сообщений. Ваш подход не реализует MAC (аутентификация сообщений). С MAC вы гарантируете, что сообщение не подделано. Хотя я согласен с тем, что несанкционированное использование SSL-сообщения сложно, вы никогда не знаете, когда ваш клиент может использовать не-SSL, а затем использовать сетевое устройство для SSL. Таким образом, сообщение может быть видимым для части пути.
Так что со всем, что было принято во внимание, это то, что я рекомендую.
- Не пропустите пароль в запросе.
- Внедрите хэшированный дайджест, который использует сильное шифрование, такое как SHA-256.
- Чтобы создать хэш хэша дайджест, выполните следующие действия: имя пользователя, pw, некоторые части запроса, если не все, и номер NONCE (номер, используемый один раз).
- Клиент может генерировать NONCE самостоятельно, если они это делают, он должен основываться на времени, например, на отметке времени, чтобы вы могли проверить, что его недавний NONCE. Или вы можете отправить им NONCE, который вы создаете самостоятельно, в коде ошибки 401 Required Required. Возможно, NONCE может быть токеном из вашего исходного сообщения.
- Для каждого запроса сервер будет хэшем тот же и убедитесь, что значение дайджест одинаков.
Что вы найдете, так это то, что другие веб-службы следуют чему-то подобному этому, но с разными именами. Точки таковы: не пропускайте пароль в сообщении, используйте дайджест для аутентификации сообщения и пользователя, используйте NONCE, чтобы дайджест не мог быть украден и повторно использован.
Это задавали много раз. Попробуйте найти "[rest] authentication". У меня есть обсуждение этой проблемы на http://soabits.blogspot.dk/2014/02/api-authentication-considerations-and.html. –
Спасибо, я видел несколько вопросов, но сегодня у меня есть некоторые сомнения, теперь я прочитал статью. –
@ JørnWildt, спасибо, что поделились этой ссылкой. –