>>> Вот сейчас в другом браузере открыл приватную вкладку, вбил туда свой токен и вуаля, я авторизован.
Собственно так и должно быть, ведь у вас в наличии есть токен, созданый для идентификации пользователя. Есть токен валидный - есть авторизация.
Тут, конечно, стоит отдельно оговорить, что кукисы есть разные. Есть http-only, которые чаще всего и используются для хранения для PHP-сессий и которые не могут быть просто так прочитаны средствами JS (точнее вообще не должны ими читаться, а читаются и устанавливаются только серверными соединениями). Но http-only куки не панацея, и не являются обязательным механизмом авторизации. В современном интернете все чаще используют токены. В данном случае реализация на JWT. Статья на хабре: https://habr.com/ru/post/340146/

То есть в нашем случае используются именно токены, и это практически обязательно для принципа API-first CMS и т.п. Собственно, так изначально и был расчет: не важно на каком устройстве ты авторизовался и получил свой токен, ты его можешь в дальнейшем использовать где угодно (пока он принимается API-сервером). Так что ваша задача просто не слить свой токен кому попало. Хотя я соглашусь, что есть еще куда усиливать безопасность и позже я этим займусь. Но сейчас это пока преждевременная оптимизация.

И да, если вы хотите на своем проекте усилить авторизацию своими средствами, это можно.
Вот здесь токен создается, когда пользователь авторизовывается: https://github.com/prisma-cms/user-module/blob/7fc769cbf1635799442fdd798f6c2f209fa7a8c2/src/modules/index.mjs#L110

А вот здесь он проверяется, когда приходит API-запрос: https://github.com/prisma-cms/prisma-context/blob/8a4384ee6d3dbdc2e8eb67bdd2661a800cad5b18/src/index.mjs#L54

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

К примеру, практически все конечные серверные модули prisma-cms используют @prisma-cms/prisma-processor, и вот в нем выполняется попытка получить текущего пользователя: https://github.com/prisma-cms/prisma-processor/blob/375e361a3b2a46aeb4efd42b233dc3c08ec2e3b7/src/index.mjs#L286
То есть не выполняется запроса к БД или типа того, а просто он дергается из контекста.

Вернуться к списку комментариев