จะสร้างโทเค็นสั้น ๆ ด้วยพาสปอร์ต laravel ได้อย่างไร

ฉันใช้ laravel Passport พร้อมโหมดการให้รหัสผ่าน ฉันพบว่ามันสร้างโทเค็นการเข้าถึงที่ยาวมาก เช่นนี้

{
    "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 Passport สามารถระบุความยาวของโทเค็นได้


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
ใช่แล้ว ดูเหมือนว่าฉันมีอักขระมากกว่า 1,000 ตัวผิดเช่นกัน .. ลองอ่านเอกสารเกี่ยวกับการสร้างโทเค็น laravel.com/docs/5.4/passport#managing-personal-access-tokens   -  person xaggre    schedule 13.03.2017
comment
คุณแก้ไขปัญหานี้หรือไม่? ฉันประสบปัญหาคล้ายกันที่โทเค็นมีความยาวมากกว่า 1,000 อักขระ!   -  person mdixon18    schedule 22.03.2017
comment
ปัญหาเดียวกันที่นี่ ????   -  person Dominik    schedule 19.07.2017
comment
ใครสามารถแก้ไขปัญหานี้ได้บ้าง? ปัญหาเดียวกัน!   -  person Aline Matos    schedule 28.07.2018


คำตอบ (3)


หากคุณรู้สึกว่าจำเป็นต้องลดความยาวของโทเค็น บางทีคุณควรสร้างไฟล์คู่คีย์ใหม่ด้วยคำสั่งนี้:

หนังสือเดินทาง php artisan:keys --length=512 --force

person Sam Shon    schedule 24.06.2019
comment
มันทำให้เกิดข้อผิดพลาด ไม่มีตัวเลือก --length เมื่อฉันรันคำสั่ง - person Sushant Kumar; 12.06.2021

ความยาวของ JWT ขึ้นอยู่กับ 2 สิ่ง: ขนาดเพย์โหลดของคุณและอัลกอริธึมการเข้ารหัสที่ใช้ Laravel ดูเหมือนจะใช้การแฮชคีย์สาธารณะ/ส่วนตัว (RS256) สำหรับ JWT ซึ่งต้องใช้ความยาวของคีย์นานกว่าการใช้อัลกอริธึม HS256 คุณสามารถดูได้หากไปที่ https://jwt.io/ และวางโทเค็นของคุณ

หากคุณต้องการใช้ Laravel Passport ไม่มีวิธีง่ายๆ ในการกำหนดความยาวนี้ คุณสามารถสร้าง libs ด้วยวิธีการที่แทนที่วิธี Passport ที่ใช้ในการตั้งค่าอัลกอริทึมการแฮช (ไม่แนะนำให้คุณลงหลุมกระต่ายนี้) หรือคุณไม่สามารถใช้ Passport และใช้ระบบตรวจสอบโทเค็น JWT ของคุณเองแทน หรือคุณสามารถ แค่ใช้ชีวิตอยู่กับโทเค็นที่ยาว

person Benjamin Dowson    schedule 28.07.2018

การใช้ Passport เวอร์ชันน้อยกว่า "^7.0.0" JTI (id ของโทเค็นที่บันทึกในตาราง oauth_access_tokens) อยู่ในส่วนหัวและในเนื้อความของ JWT การอัปเกรดเป็นเวอร์ชัน "^8.0.0" สามารถลดโทเค็น JWT ได้อีก 100 ไบต์โดยประมาณ เนื่องจากได้ลบ JTI ออกจากส่วนหัว

ดังนั้นเมื่อรวมการอัปเกรดเป็นเวอร์ชัน 8 และคำตอบโดย Sreng-s JWT ของฉันจึงลดลงเหลือ 340 ไบต์ มันดีกว่า 1,070 ไบต์ที่ฉันเริ่มด้วย แต่ก็ยังใหญ่มากเมื่อพิจารณาว่ามันถูกส่งไปพร้อมกับทุกคำขอ

การปรับปรุงเพิ่มเติมใด ๆ จะได้รับการชื่นชมอย่างมาก

person Daniel    schedule 28.04.2020