|
|
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Познаю дзен путем написания стильно-модно-молодежного пет проекта: REST backend (Spring MVC) общается посредством JSON с frontend (Angular + Spring MVC). Собственно возникла задача как организовать безопасный доступ к REST API. Вот здесь я и наткнулся на JWT. Сначала идея мне понравилась, да и с реализацией проблем нет. Но погуглив, например http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/, у меня появились сомнения насчет безопасности. Как мне кажется, в плане подмены части токена проблем возникнуть не должно. Но вот как быть с угоном токена? В таком случае выходит, что угнанным токеном можно будет пользоваться бесконечно до тех пор, пока кто-то вручную не подкрутит backend? Плюс для удобства токен придется хранить на клиенте, то есть вытащить его можно довольно тривиально через js. Поделитесь опытом, как это реализуют по-честному, без самописных свистоплясок. Или у меня паранойя и ящериков с масонами на самом деле не существует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 22:32 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
По-честному полагается рандомный токен и хранить на сервере список валидных токенов. Это нужно для того, чтобы юзер мог в любой момент уничтожить токен через logout. Рандомные токены делятся на две категории - короткие и совсем рандомные и длинные, с информацией внутри, подписанные и зашифрованные по какому-нибудь стандарту вроде JWT. Второй вариант полезен в больших системах, когда удобнее брать информацию прямо из токена, а не ходить в какую-нибудь базу. Если нет желания или возможности делать "как положено", то в подписанный токен можно просто положить expiration time, спецификация JWT содержит отдельное поле как раз для этого. Тогда токен протухнет сам через заданный интервал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 00:06 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Вообще авторизацию RestAPI сейчас модно делать через OAuth2. Помимо готовых рецептов по работе с токенами, можно самому прикрутить авторизацию через гугль, вконтакт и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 00:19 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
meph, Тут сазали, что если в токене время есть, то сабж твой не имеет смысла. 2. Токен при sso. Т.е. оверхед? У тебя же один сервер. 3. Берем базовую где сессионная кука и плюс HTTPS. Безопасность лучше твоей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 08:53 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за ответы. Попробую конкретизировать для того, чтобы избежать обсуждения авторизации в целом. У меня один backend и один frontend(оба под моим контролем, но frontend может быть и сторонний), я не планирую SSO для целого зоопарка. Я бы хотел разобраться именно с JWT. Если с этой идеей не сложится, то уже буду смотреть в сторону OAuth2. Или OAuth2 по сути уже стандарт, а JWT никто не использует? Пока я остановился именно на "длинных" токенах, и у меня есть expiration time поле. Наверное здесь и кроется главный вопрос. Удобство против безопасности. Как должен быть реализован механизм refreshToken ? С одной стороны, если токен живет час, то юзера выкинет на страницу логина даже если он только что тыкал в UI. Это очень неудобно в 21 веке. Если же мы будем делать refreshToken каждый раз, когда пришел валидный токен с истекшим expiration time, то этим токеном можно пользоваться бесконечно. И конечно мне нравится идея не лезть в БД для валидации токена при каждом реквесте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 19:06 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
meph, Если сессионная кука валидна, то ей можно пользоваться бесконечно. Пока не закроешь браузер. Почему тот же ВИ тебя смущает тут? Не усложняй жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 22:27 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
meph, Если токен или кука валидны и между запросами пол часа, то направляешь на повтор авторизации (куку сперли). Второй вариант зашить в токен id сессии. Тогда никак не украсть. Но тогда и токен не нужен. О чем выше уже было. Но ты упрямый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 22:41 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Petro123Но тогда и токен не нужен. О чем выше уже было. Одной куки последнее время недостаточно. Ибо открыл ты сессию. А потом на другом сайте фигакс тебе команду списать деньги в пользу голодающих. И опаньки - кука то ушла вместе с командой автоматом. Поэтому и добавлять токены всякие стали через параметры, причем внешне независимые от куки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 09:11 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Это и есть паранойя. Https разве не решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 09:47 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Petro123, Чем тебе https поможет от того, что из любого окна браузера можно отправить http(s) запрос на твой сервер веб почты с предложением отослать письмо (далее идет список получателей спама)? Если твой браузер получил куку (ты читаешь почту), то он ее отправит вместе с таким запросом. Вот чтобы получить значение переменной, которое следует отправлять в параметрах придется попотеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 14:41 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевЕсли твой браузер получил куку (ты читаешь почту) - эта кука в пределах домена. Т.е. в своей песочнице и рядом домен VTB24 банк она не видит. - тип куки - текст. Т.е. код вставить туда нельзя. - если куку украли, то и токен тоже можно украсть. Я не спорю, что сам Касперский умеет красть куки)). Если кто-то такой же как он, предалагаю ломать мой демо сайт). Там кук полно, а пароля вообще нет. Потом тут разберём кто смог куку украсть и как. А https спасает от перехвата пароля при базовой аутентификации в заголовке http запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 14:58 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, вообще, "оверхед" штука тонкая. Пусть ТС хоть server shibboleth себе ставит и будет так же крут как федеральная ИС ГОСУСЛУГИ. Удачи ему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 15:07 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Petro123Сергей АрсеньевЕсли твой браузер получил куку (ты читаешь почту) - если куку украли, то и токен тоже можно украсть. Куку красть никто не собирается, от слова вообще. Браузер сам ее отправит, даже если злоумышленник и не знает ее содержимое, а просто попросит отправить запрос в данный домен. Да увидеть результаты запроса, он тоже скорее всего не сможет. Но запрос уйдет и если проверка только по куке, может оказаться авторизованным. Но чтобы отправить параметр надо знать его значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 15:08 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
meph, С точки зрения безопасности в сети, признанным ресурсом является OWASP. Начните отсюда: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 15:15 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевБраузер сам ее отправит мне не интересно играть в Сноудена. Есть код, пример? Воспроизводим его на моём сайте и разбираем. Нет или лень - тему можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 15:18 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Petro123, Есть такое заклинание : "Окей гугл CSRF" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 15:20 |
|
||
|
JSON Web Tokens и безопасность
|
|||
|---|---|---|---|
|
#18+
Tomcat CRSF . Можно заменить на "ваш любимый http-сервер CRSF". Да, уязвимость есть. Но, блин, не вчера же она обнаружена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 18:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39322862&tid=2123634]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 371ms |

| 0 / 0 |
