অ্যান্টিপ্যাটার্ন: OAuth টোকেনের মেয়াদ শেষ হওয়ার সময় সেট না করা

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

API সুরক্ষিত করতে Apigee Edge OAuth 2.0 ফ্রেমওয়ার্ক প্রদান করে। OAuth2 হল সবচেয়ে জনপ্রিয় ওপেন-স্ট্যান্ডার্ড, টোকেন-ভিত্তিক যাচাইকরণ এবং অনুমোদন স্কিমগুলির মধ্যে একটি। এটি ক্লায়েন্ট অ্যাপ্লিকেশনকে ব্যবহারকারীর হয়ে API অ্যাক্সেস করতে দেয়, এর জন্য ব্যবহারকারীকে নিজের ইউজারনেম ও পাসওয়ার্ড প্রকাশ করতে হয় না।

Apigee Edge, ডেভেলপারদের চারটি OAuth2 গ্র্যান্টের মধ্যে যেকোনও একটি প্রয়োগ করে অ্যাক্সেস এবং/অথবা রিফ্রেশ টোকেন তৈরি করতে দেয় - ক্লায়েন্ট ক্রেডেনশিয়াল, পাসওয়ার্ড, ইমপ্লিসিট এবং অনুমোদন কোড - OAuthv2 নীতি ব্যবহার করে। ক্লায়েন্ট অ্যাপ্লিকেশন সুরক্ষিত API ব্যবহার করার জন্য অ্যাক্সেস টোকেন ব্যবহার করে। প্রতিটি অ্যাক্সেস টোকেনের নিজস্ব মেয়াদ শেষ হওয়ার সময় থাকে, যা OAuthv2 নীতিতে সেট করা যেতে পারে।

কিছু গ্রান্টের ধরনের ক্ষেত্রে অ্যাক্সেস টোকেনের সাথে ঐচ্ছিকভাবে রিফ্রেশ টোকেন ইস্যু করা হয়। মূল অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে বা সেটি তুলে নেওয়া হলে, নতুন, সঠিক অ্যাক্সেস টোকেন পাওয়ার জন্য রিফ্রেশ টোকেন ব্যবহার করা হয়। OAuthv2 নীতি থেকেও রিফ্রেশ টোকেনের মেয়াদ শেষ হওয়ার সময় সেট করা যেতে পারে।

এই অ্যান্টিপ্যাটার্নটি OAuth টোকেনের জন্য দীর্ঘ মেয়াদ শেষ হওয়ার সময় সেট করা অ্যান্টিপ্যাটার্নের সাথে সম্পর্কিত।

অ্যান্টিপ্যাটার্ন

OAuthv2 নীতিতে রিফ্রেশ টোকেনের মেয়াদ শেষ হওয়ার সময় সেট না করলে OAuth টোকেন জমা হতে থাকে এবং Cassandra নোডে ডিস্ক স্পেসের ব্যবহার বেড়ে যায়।

নিম্নলিখিত OAuthV2 নীতিতে <RefreshTokenExpiresIn>-এর জন্য একটি কনফিগারেশন নেই:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

উপরের উদাহরণে:

  • অ্যাক্সেস টোকেন ৩০ মিনিটের তুলনামূলকভাবে কম মেয়াদ সহ সেট করা হয়।
  • রিফ্রেশ টোকেনের মেয়াদ শেষ হওয়ার সময় সেট করা নেই।
  • ডেটা স্টোরে (Cassandra) রিফ্রেশ টোকেন চিরস্থায়ীভাবে থেকে যায়, এর ফলে ডেটা জমা হতে থাকে।
  • মেয়াদ শেষ হওয়ার তারিখ নেই এমন রিফ্রেশ টোকেন অ্যাক্সেস টোকেন তৈরি করার জন্য অনির্দিষ্টকালের জন্য ব্যবহার করা যেতে পারে।
  • এই API-তে ট্রাফিক যদি প্রতি সেকেন্ডে ১০টি অনুরোধ হয়, তাহলে এটি এক দিনে ৮৬৪,০০০টি টোকেন জেনারেট করতে পারে।

প্রভাব

  • মেয়াদ শেষ হওয়ার তারিখ ছাড়াই রিফ্রেশ টোকেন তৈরি করা হলে, দুটি প্রধান পরিণতি হয়:
    • অ্যাক্সেস টোকেন পাওয়ার জন্য রিফ্রেশ টোকেন ভবিষ্যতে যেকোনও সময়, সম্ভবত বহু বছর ধরে ব্যবহার করা যেতে পারে। এর ফলে নিরাপত্তা সংক্রান্ত সমস্যা হতে পারে।
    • রিফ্রেশ টোকেন থাকা Cassandra-র সারি কখনও মুছে ফেলা হবে না। এর ফলে Cassandra-তে ডেটা জমা হতে থাকবে।
  • আপনি যদি নতুন অ্যাক্সেস টোকেন পাওয়ার জন্য রিফ্রেশ টোকেন ব্যবহার না করেন, কিন্তু পরিবর্তে নতুন রিফ্রেশ টোকেন ও অ্যাক্সেস টোকেন তৈরি করেন, তাহলে পুরনো রিফ্রেশ টোকেনটি Cassandra-তে থেকে যাবে। এর ফলে, রিফ্রেশ টোকেন Cassandra-তে জমা হতে থাকবে, এর ফলে bloat, ডিস্কের ব্যবহার বৃদ্ধি এবং আরও বেশি কম্প্যাকশন হবে এবং এর ফলে Cassandra-তে রিড/রাইট লেটেন্সি হবে।

পেশাদার পদ্ধতি

রিফ্রেশ ও অ্যাক্সেস টোকেন, দু'টির ক্ষেত্রেই উপযুক্তভাবে কম মেয়াদ শেষ হওয়ার সময় ব্যবহার করুন। রিফ্রেশ ও অ্যাক্সেস টোকেনের মেয়াদ শেষ হওয়ার সময় সেট করার জন্য পেশাদার পদ্ধতি দেখুন। নীতিতে অ্যাক্সেস ও রিফ্রেশ টোকেন, দুটির জন্যই মেয়াদ শেষ হওয়ার কনফিগারেশন নির্দিষ্ট করতে ভুলবেন না। নীতি কনফিগারেশন সম্পর্কে আরও বিস্তারিত জানতে OauthV2 নীতি সংক্রান্ত ডকুমেন্টেশন দেখুন।

প্রাইভেট ক্লাউড গ্রাহকদের জন্য Edge-এর পেশাদার পদ্ধতি

এই বিভাগে Edge for Private Cloud গ্রাহকদের জন্য নির্দিষ্ট পেশাদার পদ্ধতি বর্ণনা করা হয়েছে।

ডিফল্ট রিফ্রেশ টোকেনের মেয়াদ শেষ হওয়ার সময়সীমা নির্দিষ্ট করুন

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

  1. মেসেজ প্রসেসর নোডে, কনফিগারেশন ওভাররাইড ফাইল এডিট বা তৈরি করুন $APIGEE_ROOT/customer/application/message-processor.properties। apigee ব্যবহারকারী এই ফাইল পড়তে পারছেন কিনা তা নিশ্চিত করুন।
  2. ফাইলে নিম্নলিখিত লাইন যোগ করুন:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    কোনও নীতিতে উল্লেখ করা না থাকলে, এটি ডিফল্ট রিফ্রেশ টোকেনের মেয়াদ ১ ঘণ্টা হিসেবে সেট করবে। আপনার ব্যবসার প্রয়োজন অনুযায়ী এই ডিফল্ট ভ্যালু পরিবর্তন করতে পারবেন।
  3. মেসেজ প্রসেসর পরিষেবা রিস্টার্ট করুন:
    apigee-service edge-message-processor restart
  4. সব মেসেজ প্রসেসর নোডে উপরের ধাপগুলি একটি একটি করে রিপিট করুন।

Cassandra-তে পেশাদার পদ্ধতি

সর্বজনীনভাবে উপলভ্য Apigee-এর লেটেস্ট ভার্সনে আপগ্রেড করার চেষ্টা করুন। Apigee ক্রমাগত সমস্যার সমাধান ও উন্নতি প্রকাশ করে চলেছে যা Apigee-এর মধ্যে টোকেন ম্যানেজমেন্টকে উন্নত ও অপ্টিমাইজ করে চলেছে। Apigee-তে, অ্যাক্সেস ও রিফ্রেশ টোকেন “kms” কীস্পেসের মধ্যে Cassandra-তে স্টোর করা হয়। এই keyspace-এর কম্প্যাকশন স্ট্র্যাটেজি LeveledCompactionStrategy হিসেবে সেট করা আছে কিনা তা আপনাকে নিশ্চিত করতে হবে। নিম্নলিখিত ইন্ডেক্সগুলি যে নেই তা আপনাকে চেক করতে হবে:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 এবং
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

এছাড়াও, টোকেন মুছে দেওয়ার কারণে তৈরি হওয়া টোমস্টোন যাতে ডেটা স্টোর থেকে দ্রুত পরিষ্কার করা যায়, তা নিশ্চিত করতে, আপনি টেবিলের kms.oauth_20_access_tokens gc_grace_seconds-এর ডিফল্ট ১০ দিনের সময়সীমা কমিয়ে কম সময়সীমা (যেমন, ৩ দিন) সেট করতে পারেন।

আরও পড়ুন