Как сгенерировать короткий токен с паспортом laravel?

Я использую паспорт laravel с режимом предоставления пароля, я обнаружил, что сгенерированный токен доступа очень длинный, например:

{
    "token_type": "Bearer",
    "expires_in": 31536000,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjRmOTlkNDI2ZmIxN2I5OGVmNzExYzMyOGQ2YzMwODBhOGY4OGVjYWI4Yjg3Zjg2MmFkNWFlNGI5MzdiYjg0MGQ3MDk2NWI2OWY4NDk3MTE0In0.eyJhdWQiOiIyIiwianRpIjoiNGY5OWQ0MjZmYjE3Yjk4ZWY3MTFjMzI4ZDZjMzA4MGE4Zjg4ZWNhYjhiODdmODYyYWQ1YWU0YjkzN2JiODQwZDcwOTY1YjY5Zjg0OTcxMTQiLCJpYXQiOjE0ODk0NDAzODEsIm5iZiI6MTQ4OTQ0MDM4MSwiZXhwIjoxNTIwOTc2MzgxLCJzdWIiOiIyIiwic2NvcGVzIjpbXX0.XEY0vMoUt6Z9cWMkELQhfcaC2uab8odQLmIVTh8YWULSYOPuw4vpTDFurgU2vflM8-5PYuIIOnw8-8CQVZvetkYLpp2r0GqdNPIcCwlZNh9zRFLLigJ1vm4GKsbGozoDieR9FBpvQ2K9gFM0V4kwjSwx74fdlC1imC1rZ8qRYy5e1zctrMSrVcGcT5F4PTm4DdTN50IRcsOIJK9T6Wgec-iYmey0-xKg0UQroCF6rZUtC0VlH8XwhW_1QfrCl7dkKIcEbWi4pgzDpwrLMZgLAQpPktCP2G9SujC99e7M_L3C8Y647enwUQSTKtp6xNyTyyHSqS0NAxU4U0TFTICMPH5D_L_WaTeBCLS3MdwM3cmTQdkjdXjljjurHld3yEvVemo7oAr2Wb_HOC1uFET0ndeVGI1ZhgM-AuUBy1dJrV4a0iyUIiVtO12LadFIK2m9h0YQlawN1me_HQy6FxdBQuMJ3WIuR3Mwp79RHkoYKFQGvfxTTK8N0emZzmLl5rODp6n7I1UKDb_g7weHdmFP2paTJCApikIXidYA-QXa1i2qMfCwB7gF_kqBvrOyL29wFFRBc_ACRA-0I8iEhZ18vF7htKkPgWoYyPzBKHjVJ4vrxV_VxbGcszIC5byAJKcmpcXEOnFXkFV7NF-tOb___hw9THTjYQmznM1OS__U8zA",
    "refresh_token": "RXFyjx21XaLKgkOXa5zZyVbhRqXDsRZbfsFZmxst4Un0+VWtl0xTn/jIOPzApdqFFoTBCH08Ytjxf6SlcEOIUuHhN5+V7wuun/nFCuKIoC2T1xg9Ny2KkzRq0IF+bSBgtZ5QXfu+ILkCSZ/uh39rRxpoO4aqcnJp2Bvj5wuVcFra2nnPCu/Rfs+AN7MA5H8WgzfLmsIFsh3/rtzU4KboFR0rQE4MrDecrJCmCjvAJS52LLdFhDnNi/KdjhxBXY7jpgXZF+HOLAribGPn9COoC7B9zGoYHA3zaOMopsJ+NaRTHsuf2VbXlrQ4eXME5XVB4+TpgU8LGipK1jv5Ndhfu/VJaxgRk94VEuAcYu4vWUEdNl5Y4sRPDSlIpwjnXxdiiAUuNnvbrUaRD/qStJmmzQiWe7M07qVTHp4PNrVOVhjZkIsFMWoMsRHWtDu0eRbde3tBOhIWUCwxndp9Ma9DlSwuq6jmhv/mi62QboYjgZrWJAqLSIeP13mRyH0kNR4LCauCpiXgaPPTywBBfYpEIn34DQeo9QQfvnnut9ky8hRgniQjhGbvgeyIOS7WgmDR0Wmbt0jwLY5MWl5WuyhAJztQPnt0sTLxWzey0ZCRC5DWMSzt/g8cTL7cfjCxPYYdLCsAYE6eXTEaA3zZLre2GnBJwwE0+3bIRctQDH9zYRE="
}

Я знаю, что длинный токен будет безопаснее, но более тысячи символов кажутся немного пугающими. По моему мнению, JWT обычно очень маленький, но здесь этот сгенерированный токен такой длинный, такой большой.

Я хочу сгенерировать более короткий токен, как это сделать?

Если паспорт laravel может указать длину токена?


person Shaun    schedule 13.03.2017    source источник
comment
Я думаю, что это стандартные токены OAUTH, каждое определение которых может иметь длину 255 символов — использование достаточно длинного токена также является мерой безопасности. Каковы ваши доводы против длинного токена?   -  person xaggre    schedule 13.03.2017
comment
@MyronHöster, однако, токен доступа в сообщении имеет длину более тысячи символов.   -  person Joel Hinz    schedule 13.03.2017
comment
Да, более 1000 символов мне тоже кажется неправильным. Попробуйте прочитать документы о присвоении токенов geenrating laravel.com/docs/5.4/passport#managing-personal-access-tokens   -  person xaggre    schedule 13.03.2017
comment
Вы решили это? У меня аналогичная проблема, когда токен имеет длину более 1000 символов!   -  person mdixon18    schedule 22.03.2017
comment
Та же проблема здесь. ????   -  person Dominik    schedule 19.07.2017
comment
Кто-нибудь может решить это? Та же проблема!   -  person Aline Matos    schedule 28.07.2018


Ответы (3)


Если вам нужно сократить длину токена, возможно, вам следует повторно сгенерировать файлы пары ключей с помощью этой команды:

Паспорт ремесленника php: ключи --length=512 --force

person Sam Shon    schedule 24.06.2019
comment
выдает ошибку Опция --length не существует. когда я запускаю команду - person Sushant Kumar; 12.06.2021

Длина JWT зависит от двух вещей: размера полезной нагрузки и используемого алгоритма шифрования. Похоже, что Laravel использует хеширование открытого/закрытого ключа (RS256) для своих JWT, что требует более длинных ключей, чем, скажем, при использовании алгоритма HS256. Вы можете увидеть это, если перейдете на https://jwt.io/ и вставите свой токен.

Если вы хотите использовать Laravel Passport, то нет простого способа обойти это требование длины. Вы можете либо создать библиотеки с методами, которые переопределяют метод Passport, используемый для установки алгоритма хеширования (не рекомендуется спускаться в эту кроличью нору), либо вы можете просто не использовать Passport и вместо этого реализовать свою собственную систему аутентификации токена JWT, или вы можете просто живите с длинными токенами.

person Benjamin Dowson    schedule 28.07.2018

При использовании версии Passport ниже "^7.0.0" JTI (идентификатор токена, сохраненный в таблице oauth_access_tokens) находится как в заголовке, так и в теле JWT. Обновление до версии "^8.0.0" может уменьшить токен JWT еще на 100 байт или около того, поскольку они удалили JTI из заголовка.

Таким образом, объединив обновление до версии 8 и ответ от Sreng-s, мой JWT сократился до 340 байт. Это лучше, чем 1070 байт, с которых я начал, но это все еще очень много, учитывая, что оно отправляется с каждым запросом.

Буду очень признателен за любые дальнейшие улучшения.

person Daniel    schedule 28.04.2020