عنوان الواجهة الأمامية: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
إذا كان لديك أي أسئلة، يرجى مسح الرمز والانضمام إلى مجموعة QQ للتواصل: 779168604
- أولاً، قم بنشر اسم المستخدم وكلمة المرور إلى المستخدم/تسجيل الدخول لتسجيل الدخول. في حالة النجاح، سيتم إرجاع AccessToken المشفر. إذا فشل، سيتم إرجاع خطأ 401 مباشرة (الحساب أو كلمة المرور غير صحيحة).
- ما عليك سوى إحضار AccessToken معك للزيارات المستقبلية.
- تقوم عملية المصادقة بشكل أساسي بإعادة كتابة مرشح إدخال Shiro JWTFilter ( BasicHttpAuthenticationFilter ) لتحديد ما إذا كان رأس الطلب يحتوي على حقل التفويض .
- إذا كانت الإجابة بنعم، فقم بإجراء مصادقة تسجيل الدخول إلى Shiro Token وتفويضه (كل طلب وصول مستخدم يتطلب إذنًا يجب أن يضيف حقل التفويض في الرأس لتخزين AccessToken )، إذا لم يكن الأمر كذلك، فاستخدم الوصول المباشر كزائر (إذا كان هناك تحكم في الأذونات ، سيتم اعتراض وصول الزوار)
معظمهم يحل هذه المشكلة على شكل MD5 + salt (التفاصيل من Baidu). أستخدم AES-128 + Base64 لتشفير كلمة المرور على شكل حساب + كلمة مرور، لأن الحساب فريد، ولن تظهر نفس البنية مشكلة كلمة المرور السرية
في الأصل، تم حقن JedisUtil مباشرة كفاصوليا ، وفي كل مرة يتم استخدامه، يمكن حقنه مباشرة
@Autowired
، ومع ذلك، بعد إعادة كتابة CustomCache الخاص بـ Shiro ، لا يمكن حقن JedisUtil ، لذلك تم تغييره إلى حقن ثابت في JedisPool. لا تزال فئة أدوات JedisUtil تستدعي الطريقة@Autowired
مباشرة
- بعد تمرير مصادقة تسجيل الدخول، يتم إرجاع معلومات AccessToken ( يتم حفظ الطابع الزمني الحالي ورقم الحساب في AccessToken )
- في الوقت نفسه، قم بتعيين RefreshToken في Redis مع الحساب باعتباره المفتاح والقيمة باعتبارها الطابع الزمني الحالي (وقت تسجيل الدخول)
- الآن، أثناء المصادقة، يجب ألا تكون صلاحية AccessToken قد انتهت، ويجب أن يكون RefreshToken المقابل موجودًا في Redis ، ويجب أن يكون الطابع الزمني RefreshToken متسقًا مع الطابع الزمني في معلومات AccessToken قبل تمرير المصادقة، وهذا يمكن أن يحقق إمكانية التحكم في JWT.
- إذا قمت بتسجيل الدخول مرة أخرى وحصلت على AccessToken جديد، فلا يمكن مصادقة AccessToken القديم، لأن معلومات الطابع الزمني RefreshToken المخزنة في Redis ستكون متوافقة فقط مع الطابع الزمني الموجود في أحدث معلومات AccessToken التي تم إنشاؤها ، لذلك يمكن لكل مستخدم فقط استخدام أحدث AccessToken شهادة
- يمكن أيضًا استخدام RefreshToken الخاص بـ Redis لتحديد ما إذا كان المستخدم متصلاً بالإنترنت. إذا تم حذف Redis RefreshToken ، فلن يتمكن AccessToken المطابق لـ RefreshToken من تمرير المصادقة، وهذا يعادل التحكم في تسجيل دخول المستخدم وإزالة المستخدم .
- وقت انتهاء صلاحية AccessToken نفسه هو 5 دقائق (قابل للتكوين في ملف التكوين)، ووقت انتهاء صلاحية RefreshToken هو 30 دقيقة (قابل للتكوين في ملف التكوين)
- عند مرور 5 دقائق بعد تسجيل الدخول، ستنتهي صلاحية AccessToken الحالي. إذا أحضرت AccessToken مرة أخرى للوصول إلى JWT، فسيتم طرح استثناء TokenExpiredException ، للإشارة إلى انتهاء صلاحية الرمز المميز .
- ابدأ في تحديد ما إذا كان سيتم تحديث AccessToken أم لا. يستعلم Redis عما إذا كان RefreshToken الخاص بالمستخدم الحالي موجودًا ، وما إذا كان الطابع الزمني الذي يحمله RefreshToken هذا متوافقًا مع الطابع الزمني الذي يحمله AccessToken منتهي الصلاحية.
- إذا كان موجودًا ومتسقًا، فقم بتحديث AccessToken، وقم بتعيين وقت انتهاء الصلاحية على 5 دقائق (قابل للتكوين في ملف التكوين)، والطابع الزمني على أحدث طابع زمني، وقم أيضًا بتعيين الطابع الزمني في RefreshToken على أحدث طابع زمني، وقم بتحديث انتهاء الصلاحية الوقت إلى 30 مرة أخرى انتهاء الصلاحية بالدقائق (قابل للتكوين في ملف التكوين).
- أخيرًا، يتم تخزين AccessToken المحدث في حقل التفويض في رأس الاستجابة وإعادته (تحصل الواجهة الأمامية عليه وتستبدله، وتستخدم AccessToken الجديد للوصول في المرة القادمة)
قم أولاً بتكوين الملف srcmainresourcesgeneratorgeneratorConfig.xml (التكوين الافتراضي موجود ضمن الحزمة العكسية في المستوى الأدنى من الحزمة الأصلية)، وقم بتنفيذه في نافذة سطر الأوامر لدليل مستوى pom.xml ( أي ضمن الدليل الجذر للمشروع) (الفرضية هي أنه تم تكوين mvn) (يمكن تنفيذ IDEA مباشرة عن طريق النقر المزدوج في نافذة Maven Plugins)
mvn mybatis-generator:generate
先设置Content - Type为application / json
然后填写请求参数帐号密码信息
进行请求访问,请求访问成功
点击查看Header信息的Authorization属性即是Token字段
访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可
Token的自动刷新也是在Token失效时返回新的Token在Header信息的Authorization属性