JWT টোকেন প্রবাহ রিফ্রেশ


129

আমি একটি মোবাইল অ্যাপ তৈরি করছি এবং প্রমাণীকরণের জন্য JWT ব্যবহার করছি।

দেখে মনে হচ্ছে এটি করার সর্বোত্তম উপায় হ'ল JWT অ্যাক্সেস টোকেনকে রিফ্রেশ টোকেনের সাথে যুক্ত করা যাতে আমি যতবার চাই অ্যাক্সেস টোকেনটি মেয়াদ শেষ করতে পারি।

  1. রিফ্রেশ টোকেন দেখতে কেমন? এটি কি এলোমেলো স্ট্রিং? যে স্ট্রিং এনক্রিপ্ট করা হয়? এটা কি আর জেডাব্লুটি?
  2. রিফ্রেশ টোকেন অ্যাক্সেসের জন্য ব্যবহারকারীর মডেলটিতে ডাটাবেসে সংরক্ষণ করা হবে? মনে হচ্ছে এটি এ ক্ষেত্রে এনক্রিপ্ট করা উচিত
  3. একজন ব্যবহারকারী লগইন করার পরে কি আমি রিফ্রেশ টোকেনটি প্রেরণ করব এবং তারপরে ক্লায়েন্টটি অ্যাক্সেস-টোকেনটি পুনরুদ্ধার করার জন্য একটি পৃথক রুট অ্যাক্সেস করতে পারবে?

3
দ্রষ্টব্য, আপনি যদি রিফ্রেশ টোকেন ব্যবহার করছেন তবে আপনার ব্যবহারকারীদের ইউআই-তে অবৈধ করার জন্য একটি দক্ষতা সরবরাহ করা উচিত। এগুলি যদি এক মাসের জন্য উদাহরণস্বরূপ ব্যবহার না করা হয় তবে সেগুলি স্বয়ংক্রিয়ভাবে মেয়াদ শেষ করার জন্যও সুপারিশ করা হয়।
উইলমন্তাস বড়ানউককাস

1
@ জেটমারমন: আপনি ক্লায়েন্টের পাশে রিফ্রেশ টোকন কীভাবে সংরক্ষণ করবেন? মানে কি সুরক্ষা সহ অ্যান্ড্রয়েড ডিভাইস?
j10

উত্তর:


39

ধরে নিই যে এটি ওআউথ ২.০ সম্পর্কে, যেহেতু এটি জেডব্লিউটি এবং রিফ্রেশ টোকেন সম্পর্কে ...:

  1. অ্যাক্সেস টোকেনের মতোই, নীতিগতভাবে একটি রিফ্রেশ টোকন আপনার বর্ণিত সমস্ত বিকল্প সহ কিছু হতে পারে; কোনও জেডাব্লুটিটি ব্যবহার করা যেতে পারে যখন অনুমোদনের সার্ভারটি রাষ্ট্রহীন হতে চায় বা ক্লায়েন্টের কাছে উপস্থাপনের জন্য কোনও ধরণের "প্রুফ-অফ-দখল" শব্দার্থ প্রয়োগ করতে চায়; মনে রাখবেন যে রিফ্রেশ টোকেনটি অ্যাক্সেস টোকেনের থেকে পৃথক যে এটি কোনও রিসোর্স সার্ভারের কাছে উপস্থাপন করা হয়নি তবে এটি কেবলমাত্র অনুমোদন সার্ভারের কাছে উপস্থাপিত হয়েছে যা এটি প্রথম স্থানে জারি করেছে, তাই জেডাব্লুটিএস-যেমন-অ্যাক্সেস-টোকেনগুলির স্ব-অন্তর্ভুক্ত বৈধতা অপ্টিমাইজেশন রয়েছে রিফ্রেশ টোকেন জন্য রাখা না

  2. এটি ডাটাবেসের সুরক্ষা / অ্যাক্সেসের উপর নির্ভর করে; যদি অন্য পক্ষগুলি / সার্ভার / অ্যাপ্লিকেশন / ব্যবহারকারীদের দ্বারা ডাটাবেস অ্যাক্সেস করা যায়, তবে হ্যাঁ (তবে আপনার মাইলেজটি কোথায় এবং কীভাবে আপনি এনক্রিপশন কী সঞ্চয় করবেন তার সাথে আলাদা হতে পারে ...)

  3. কোনও অনুমোদন সার্ভার ক্লায়েন্ট দ্বারা প্রাপ্ত অনুদানের উপর নির্ভর করে একই সাথে অ্যাক্সেস টোকেন এবং রিফ্রেশ টোকেন উভয়ই দিতে পারে; বৈশিষ্টটিতে প্রতিটি মানকীয় অনুদানের বিবরণ এবং বিকল্প রয়েছে


31
২. আপনার ডাটাবেসে রিফ্রেশ টোকেনের একটি হ্যাশ সংরক্ষণ করা উচিত এবং তারপরে ব্যবহারকারীর রিফ্রেশ টোকনের হ্যাশটিকে আপনার স্টোরেজ হ্যাশের সাথে তুলনা করুন। "আপনার ডাটাবেসে সাধারণ পাঠ্য পাসওয়ার্ড সংরক্ষণ করবেন না" এই নিয়মটি এখানে অনুসরণ করা হয়েছে। আপনি ব্যবহারকারীর জন্য তৈরি এলোমেলো পাসওয়ার্ডের মতো একটি টোকেন বিবেচনা করুন।
রোহমার

2
এছাড়াও, আপনি যদি আরও সুরক্ষা সরবরাহ করতে চান তবে তাজা টোকেন ঘোরান perform এর গুরুত্ব ইতিমধ্যে ITEF আরএফসি 6749 এ উল্লিখিত হয়েছে । যদি সঠিকভাবে প্রয়োগ করা হয়, এটি টোকেন চুরির দৃশ্য সনাক্তকরণে সহায়তা করতে পারে, অর্থাত্ রিফ্রেশ টোকন আক্রমণকারী দ্বারা চুরি হয়েছে। আপনি যদি আরও ভাল ব্যাখ্যা খুঁজছেন তবে এই লিঙ্কটিতে যান
ভুমিল সারভাইয়া

82

নীচে আপনার JWT অ্যাক্সেস টোকেন প্রত্যাহার করার পদক্ষেপগুলি রয়েছে:

  1. আপনি যখন লগ ইন করেন, ক্লায়েন্টের প্রতিক্রিয়ায় 2 টোকেন (অ্যাক্সেস টোকেন, রিফ্রেশ টোকেন) প্রেরণ করুন।
  2. অ্যাক্সেস টোকেনটির মেয়াদ কম হবে এবং রিফ্রেশের দীর্ঘ মেয়াদ শেষ হবে।
  3. ক্লায়েন্ট (সম্মুখ প্রান্ত) তার স্থানীয় স্টোরেজে রিফ্রেশ টোকন এবং কুকিজের অ্যাক্সেস টোকেন সংরক্ষণ করবে।
  4. ক্লায়েন্ট এপিআইগুলিতে কল করার জন্য একটি অ্যাক্সেস টোকেন ব্যবহার করবে। তবে এটির মেয়াদ শেষ হয়ে গেলে স্থানীয় স্টোরেজ থেকে রিফ্রেশ টোকেনটি বেছে নিন এবং নতুন টোকেনটি পাওয়ার জন্য অ্যাথ সার্ভার এপিআই কল করুন।
  5. আপনার প্রমাণীকরণের সার্ভারে একটি API উন্মুক্ত থাকবে যা রিফ্রেশ টোকেন গ্রহণ করবে এবং এর বৈধতার জন্য পরীক্ষা করবে এবং একটি নতুন অ্যাক্সেস টোকন ফিরিয়ে দেবে।
  6. রিফ্রেশ টোকেনটির মেয়াদ শেষ হয়ে গেলে ব্যবহারকারী লগ আউট হয়ে যাবে।

আপনার আরও বিশদ বিবরণ প্রয়োজন হলে আমাকে জানান, আমি কোডটি (জাভা + স্প্রিং বুট )ও ভাগ করতে পারি।

আপনার প্রশ্নের জন্য:

প্রশ্নোত্তর: এটি দীর্ঘ সময়সীমার সাথে কম দাবিযুক্ত আরও জেডাব্লুটিটি।

প্রশ্ন 2: এটি কোনও ডাটাবেসে থাকবে না। ব্যাকএন্ড কোথাও সঞ্চয় করবে না। তারা কেবলমাত্র ব্যক্তিগত / পাবলিক কী দিয়ে টোকেনটি ডিক্রিপ্ট করবে এবং এর মেয়াদ শেষ হওয়ার সাথে সাথে এটি বৈধতা দেবে।

প্রশ্ন 3: হ্যাঁ, সঠিক


28
আমি মনে করি JWT সংরক্ষণ করা উচিত localStorageএবং refreshTokenএকটি সংরক্ষণ করা উচিত httpOnlyrefreshToeknতাই এটি অতিরিক্ত সাবধানতার সাথে নিয়ে নাড়াচাড়া করতে হবে একটি নতুন JWT পেতে ব্যবহার করা যাবে।
টিএনসি আন্দ্রেই

2
ধন্যবাদ httpOnly এ স্টোর করে আপনি কী বোঝাতে চাইছেন? কেন লোকাল স্টোরেজ এ দুটোই সঞ্চয় করবেন না?
জয়

8
আমি রিফ্রেশ টোকেনটি ব্যবহার করার সুবিধাগুলি মিস করছি, অ্যাক্সেস টোকেনটির মেয়াদ বাড়ানোর জন্য কি একই হবে না?
ব্যবহারকারী 2010955

3
@ জা মাইক্রোসফ্ট ডেভেলপার নেটওয়ার্কের মতে, এইচটিপিঅনলি একটি সেট-কুকি এইচটিটিপি রেসপন্স শিরোনামে অন্তর্ভুক্ত একটি অতিরিক্ত পতাকা। কোনও কুকি তৈরি করার সময় এইচটিপিঅনলি পতাকা ব্যবহার করা ক্লায়েন্ট সাইড স্ক্রিপ্টের সুরক্ষিত কুকিতে অ্যাক্সেসের ঝুঁকি হ্রাস করতে সহায়তা করে (যদি ব্রাউজার এটি সমর্থন করে)।
छाया0359

23
# 2 অত্যন্ত ভুল। একটি রিফ্রেশ টোকেন হ'ল সার্ভারের পাশেই। রিফ্রেশ টোকেনের জন্য আপনার জেডাব্লুটিটির "স্ব-অন্তর্ভুক্ত" সম্পত্তিটি নেওয়া উচিত নয়। এটি করার ফলে আপনার ব্যক্তিগত কী পরিবর্তন করা ছাড়া অন্য রিফ্রেশ টোকেনগুলি প্রত্যাহার করার কোনও উপায় নেই।
জয় শর্মা

26

রিফ্রেশ টোকেন সহ জেডাব্লুটিটির নোড.জেএস এর সাথে এই বাস্তবায়নের ভিত্তিতে :

1) এই ক্ষেত্রে তারা একটি ইউআইডি ব্যবহার করে এবং এটি জেডাব্লুটিটি নয়। তারা টোকেনটি রিফ্রেশ করলে তারা রিফ্রেশ টোকেন এবং ব্যবহারকারীকে প্রেরণ করে। আপনি যদি এটি JWT হিসাবে প্রয়োগ করেন তবে আপনাকে ব্যবহারকারী পাঠানোর দরকার নেই, কারণ এটি JWT এর অভ্যন্তরে।

2) তারা এটি একটি পৃথক নথিতে (টেবিল) প্রয়োগ করে। এটি আমার কাছে বোধগম্য কারণ কোনও ব্যবহারকারী বিভিন্ন ক্লায়েন্ট অ্যাপ্লিকেশনগুলিতে লগ ইন করতে পারেন এবং এটি অ্যাপ্লিকেশন দ্বারা রিফ্রেশ টোকন পেতে পারে। ব্যবহারকারী যদি একটি অ্যাপ্লিকেশন ইনস্টল থাকা কোনও ডিভাইস হারাতে থাকে তবে অন্যান্য লগ ইন করা ডিভাইসগুলিকে প্রভাবিত না করে that ডিভাইসের রিফ্রেশ টোকেনটি অবৈধ হতে পারে।

3) এই প্রয়োগে এটি লগ ইন পদ্ধতিতে উভয়ের সাথে সাড়া দেয়, অ্যাক্সেস টোকেন এবং রিফ্রেশ টোকেন। এটা আমার জন্য সঠিক seams।


"1) বলে তারা এই ক্ষেত্রে একটি ইউআইডি ব্যবহার করে ..." আপনি কি ইউইউডি বলতে চাইছেন?
ওজানমুয়েস

এই সহজ বাস্তবায়নের বিষয়ে কী - জেডব্লিউটি ইস্যু করুন - আপনি রিফ্রেশ করতে চাইলে প্রবীণ জেডব্লিউটি প্রেরণ করুন - (আপনি iatউইন্ডো দিয়ে চেক করতে পারেন ) - আগেরটির উপর ভিত্তি করে একটি নতুন পুনরায় প্রকাশ করুন
অ্যাডোনস

@ অ্যাডোনসকে পাঠিয়েই JWTকি আপনি এর refresh_tokenঅভ্যন্তরটি রাখতে চান? যদি তা হয় তবে ওআউথ আরএফসি 6749 স্পষ্টতই refresh_tokenরিসোর্স সার্ভারে প্রেরণ না করার জন্য বলেছে (এবং JWTএটি রিসোর্স সার্ভারগুলিতে প্রেরণ করা হয়েছে): সরঞ্জাম. ietf.org/html/rfc6749#section-1.5
ব্রেন্নো কোস্টা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.