В плане безопасности и токен, и куки равны. Под безопасностью имею ввиду сложность взлома.
Можно выделить несколько основных отличий:
1. Куки - хранятся на сервере и на клиенте, токен - хранится на клиенте
2. Куки привязываются к домену, который авторизовался, а токен нет - это даёт большую гибкость, и она становится необходимостью при разработке распределённых систем.
3. Токен можно использовать выборочно на запросах, а куки на всех запросах. В случае с куки, это может привести к XSRF атакам, т.к. после авторизации, все запросы будут считаться авторизованными. Например, ты авторизовался на сайте
site.com
, я отправил тебе письмо с таким тегом:
<img src="https://site.com/money?money=200&to=me />
. В результате мне перечислит 200 единиц, т.к. после авторизации с куки, все запросы считаются авторизованными и запрос
https://site.com/money?money=200&to=me
отработает. Способы защититься от таких атак существуют.
В последние пару лет токены стали чаще использовать, по трём причинам:
1. Они stateless, что больше соотвествуют SPA (angular, vue, react) - один из моментов SPA в том, что состояние клиента находится на клиенте.
2. Гибкость, т.к. токены не привязаны к одному домену
3. Они набрали популярность))
За последние два года лично мне не попадалось проектов с куки-авторизацией, стек .net + angular/react
https://dev.to/spukas/authentication-cookies-vs-to...
https://stackoverflow.com/questions/17000835/token...
https://www.linkedin.com/pulse/cookie-vs-token-aut...