তৃতীয় পক্ষের OAuth টোকেন ব্যবহার করা

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

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

সাধারণত, Apigee Edge একটি OAuth টোকেন তৈরি ও সংরক্ষণ করে এবং সেটি কলিং অ্যাপ্লিকেশনে ফেরত পাঠায়। এরপর কলিং অ্যাপটি পরিষেবা অনুরোধ করার সময় সেই টোকেনটি Apigee Edge-এর কাছে পুনরায় উপস্থাপন করে, এবং Apigee Edge - Operation = VerifyAccessToken সহ OAuthV2 পলিসির মাধ্যমে - টোকেনটি বৈধ কিনা তা যাচাই করে। এই টপিকে বর্ণনা করা হয়েছে কীভাবে আপনি Apigee Edge-কে এমনভাবে কনফিগার করতে পারেন যাতে এটি অন্য কোথাও তৈরি করা একটি OAuth টোকেন সংরক্ষণ করে, এবং একই সাথে টোকেন যাচাইকরণের প্রক্রিয়াটিও অপরিবর্তিত রাখে, ঠিক যেমনটি Edge দ্বারা টোকেনটি তৈরি করা হলে হতো।

উদাহরণ

আপনি যদি এই বিষয়ে বর্ণিত কৌশলটির একটি কার্যকরী উদাহরণ দেখতে চান, তাহলে Apigee Delegated Token Management নমুনাটি দেখুন।

এটা কী?

ধরুন, আপনার একটি বিদ্যমান অনুমোদন ব্যবস্থা (authorization system) আছে, এবং আপনি Edge-এর তৈরি করা OAuth2 টোকেন বা কোডের পরিবর্তে সেই সিস্টেম দ্বারা তৈরি টোকেন বা কোড ব্যবহার করতে চান। সেক্ষেত্রে, আপনি সেই প্রতিস্থাপিত টোকেন বা কোড ব্যবহার করে সুরক্ষিত এপিআই প্রক্সি (API proxy) অনুরোধ পাঠাতে পারবেন, এবং Edge সেগুলোকে এমনভাবে যাচাই করবে যেন সেগুলো Edge নিজেই তৈরি করেছে।

কিছু প্রেক্ষাপট

সাধারণত, Apigee Edge অক্ষর এবং সংখ্যার একটি র‍্যান্ডম স্ট্রিং তৈরি করে একটি টোকেন জেনারেট করে। Apigee Edge সেই টোকেনের সাথে অন্যান্য ডেটা যুক্ত করে, যেমন টোকেনটি ইস্যু করার সময়, মেয়াদ, যে সমস্ত API প্রোডাক্টের জন্য টোকেনটি বৈধ তার তালিকা এবং স্কোপ। এই সমস্ত তথ্য একটি রেসপন্সে ফেরত দেওয়া যেতে পারে, যা Operation = GenerateAccessToken দিয়ে কনফিগার করা OAuthV2 পলিসি দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হয়। রেসপন্সটি দেখতে এইরকম:

{
  "issued_at": "1469735625687",
  "application_name": "06947a86-919e-4ca3-ac72-036723b18231",
  "scope": "urn://example.com/read",
  "status": "approved",
  "api_product_list": "[implicit-test]",
  "api_product_list_json": ["implicit-test"],
  "expires_in": "1799", //--in seconds
  "developer.email": "joe@weathersample.com",
  "token_type": "BearerToken",
  "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk",
  "access_token": "zBC90HhCGmGlaMBWeZAai2s3za5j",
  "organization_name": "wwitman",
  "refresh_token_expires_in": "0", //--in seconds
  "refresh_count": "0"
}

access_token অ্যাট্রিবিউটের মানটি কার্যকরভাবে রেসপন্স ডেটার জন্য লুকআপ কী হিসেবে কাজ করে। একটি অ্যাপ Edge-এ হোস্ট করা একটি API প্রক্সিতে zBC90HhCGmGlaMBWeZAai2s3za5j বেয়ারার টোকেনটি ব্যবহার করে একটি অনুরোধ পাঠাতে পারে, এবং Edge – তার OAuthV2 পলিসিতে Operation = VerifyAccessToken সেট করা থাকলে – টোকেনটি খুঁজে বের করবে, সমস্ত তথ্য সংগ্রহ করবে এবং সেই তথ্য ব্যবহার করে অনুরোধ করা API প্রক্সির জন্য টোকেনটি বৈধ কি না তা নির্ধারণ করবে। একে টোকেন ভ্যালিডেশন বলা হয়। উপরের সমস্ত তথ্য মিলেই টোকেনটি গঠিত হয়। access_token মানটি হলো সেই তথ্য খুঁজে বের করার একটি উপায় মাত্র।

অন্যদিকে, এখানে বর্ণিত ধাপগুলো অনুসরণ করে, আপনি Edge-কে এমনভাবে কনফিগার করতে পারেন যাতে এটি একটি টোকেন সংরক্ষণ করে এবং এর access_token ভ্যালুটি কোনো বাহ্যিক পরিষেবা দ্বারা তৈরি হয়। অন্যান্য সমস্ত মেটাডেটা একই থাকতে পারে। উদাহরণস্বরূপ, ধরুন আপনার Apigee Edge-এর বাইরে এমন একটি সিস্টেম আছে যা "TOKEN-< ১৬টি র‍্যান্ডম সংখ্যা >" এই ধরনের টোকেন তৈরি করে। সেক্ষেত্রে, Apigee Edge দ্বারা সংরক্ষিত সম্পূর্ণ টোকেন মেটাডেটা হতে পারে:

{
  "issued_at": "1469735625687",
  "application_name": "06947a86-919e-4ca3-ac72-036723b18231",
  "scope": "urn://example.com/read",
  "status": "approved",
  "api_product_list": "[implicit-test]",
  "api_product_list_json": ["implicit-test"],
  "expires_in": "1799", //--in seconds
  "developer.email": "joe@weathersample.com",
  "token_type": "BearerToken",
  "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk",
  "access_token": "TOKEN-1092837373654221",
  "organization_name": "wwitman",
  "refresh_token_expires_in": "0", //--in seconds
  "refresh_count": "0"
}

এই ক্ষেত্রে, একটি অ্যাপ TOKEN-1092837373654221 বেয়ারার টোকেনটি বহন করে Edge-এ হোস্ট করা একটি API প্রক্সিতে অনুরোধ করতে পারে, এবং Edge - Operation = VerifyAccessToken সহ OAuthV2 পলিসির মাধ্যমে - এটি যাচাই করতে সক্ষম হবে। আপনি অথরাইজেশন কোড এবং রিফ্রেশ টোকেনের ক্ষেত্রেও একই ধরনের ইম্পোর্ট প্যাটার্ন প্রয়োগ করতে পারেন।

আসুন ক্লায়েন্টের পরিচয়পত্র যাচাইকরণ নিয়ে আলোচনা করা যাক

টোকেন তৈরি করার একটি পূর্বশর্ত হলো অনুরোধকারী ক্লায়েন্টকে যাচাই করা। ডিফল্টরূপে, Apigee Edge-এর OAuthV2/GenerateAccessToken পলিসি পরোক্ষভাবে ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই করে। সাধারণত একটি OAuthV2 টোকেনের অনুরোধে, ক্লায়েন্ট_আইডি এবং ক্লায়েন্ট_সিক্রেট Authorization হেডারে পাস করা হয়, যা HTTP Basic Authorization-এর মাধ্যমে এনকোড করা থাকে (কোলন দিয়ে সংযুক্ত করে, তারপর বেস৬৪-এ এনকোড করা)। Apigee Edge-এর OAuthV2/GenerateAccessToken পলিসি সেই হেডারটি ডিকোড করে ক্লায়েন্ট_আইডি খুঁজে বের করে এবং যাচাই করে যে পাস করা ক্লায়েন্ট_সিক্রেটটি সেই ক্লায়েন্ট_আইডির জন্য বৈধ কিনা। এটি তখনই কাজ করে যখন ক্রেডেনশিয়ালগুলো Apigee Edge-এর কাছে পরিচিত থাকে — অন্য কথায়, Apigee Edge-এর মধ্যে একটি ডেভেলপার অ্যাপ সংরক্ষিত থাকে, যেটিতে একটি ক্রেডেনশিয়াল রয়েছে এবং সেই ক্রেডেনশিয়ালটিতেই প্রদত্ত ক্লায়েন্ট_আইডি ও ক্লায়েন্ট_সিক্রেট বিদ্যমান।

যদি Apigee Edge দ্বারা ক্লায়েন্টের পরিচয়পত্র যাচাই করার প্রয়োজন না হয়, তবে টোকেন তৈরি করার আগে আপনাকে আপনার API Proxy এমনভাবে ডিজাইন করতে হবে, যাতে এটি অন্য কোনো উপায়ে ক্লায়েন্টকে স্পষ্টভাবে যাচাই করে। প্রায়শই এটি একটি ServiceCallout পলিসির মাধ্যমে করা হয়, যা আপনার নেটওয়ার্কের একটি রিমোট এন্ডপয়েন্টের সাথে সংযোগ স্থাপন করে।

কোনো না কোনোভাবে, পরোক্ষভাবে বা প্রত্যক্ষভাবে, আপনাকে নিশ্চিত করতে হবে যে টোকেন তৈরি করে এমন এপিআই প্রক্সিটি প্রথমে ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই করে। মনে রাখবেন যে ক্লায়েন্ট যাচাই করা এবং অ্যাক্সেস টোকেন তৈরি করা একটি স্বাধীন বিষয়। আপনি Apigee Edge-কে উভয় কাজ করার জন্য, অথবা যেকোনো একটি করার জন্য, বা কোনোটিই না করার জন্য কনফিগার করতে পারেন।

আপনি যদি Apigee Edge-এর OAuthV2/GenerateAccessToken পলিসি দিয়ে Edge স্টোরের বিপরীতে ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই করতে চান, তাহলে পলিসি কনফিগারেশনের ভিতরে <ExternalAuthorization> এলিমেন্টটিকে false এ সেট করুন, অথবা এটি সম্পূর্ণ বাদ দিন। আপনি যদি ক্লায়েন্টের ক্রেডেনশিয়াল স্পষ্টভাবে যাচাই করার জন্য একটি বাহ্যিক অনুমোদন পরিষেবা ব্যবহার করতে চান, তাহলে <ExternalAuthorization> true তে সেট করুন।

যদিও Apigee Edge ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই নাও করতে পারে, তবুও Apigee Edge-এর কাছে client_id-টি পরিচিত এবং পরিচালিত হওয়া আবশ্যক। Apigee Edge-এর প্রতিটি access_token, তা Apigee Edge দ্বারা তৈরি হোক বা কোনো বাহ্যিক সিস্টেম দ্বারা তৈরি হয়ে Apigee Edge-এ ইম্পোর্ট করা হোক, সেটিকে অবশ্যই একটি ক্লায়েন্ট অ্যাপ্লিকেশনের সাথে যুক্ত থাকতে হবে – যা client_id দ্বারা নির্দেশিত হয়। তাই, Apigee Edge-এর OAuthV2/GenerateAccessToken পলিসি যদি client_id এবং client_secret-এর মিল যাচাই নাও করে, তবুও পলিসিটি যাচাই করবে যে client_id-টি বৈধ, উপস্থিত এবং বাতিল করা হয়নি। সুতরাং, একটি পূর্বশর্ত সেটআপ ধাপ হিসেবে, আপনাকে Edge অ্যাডমিনিস্ট্রেটিভ API-এর মাধ্যমে client_id ইম্পোর্ট করতে হতে পারে।

Apigee-তে তৃতীয় পক্ষের OAuth-এর জন্য পলিসি ফ্লো

Apigee Edge-এ তৃতীয় পক্ষের OAuth সিস্টেম থেকে টোকেন ব্যবহার করতে হলে, অ্যাক্সেস টোকেন তৈরির প্রক্রিয়াটি নিম্নলিখিত প্যাটার্নগুলোর মধ্যে যেকোনো একটি অনুসরণ করবে।

ক্লায়েন্টের পরিচয়পত্রের বাহ্যিক যাচাইকরণ

  1. আগত ক্লায়েন্টের পরিচয়পত্র যাচাই করতে এবং একটি বাহ্যিক টোকেন সংগ্রহ করতে সার্ভিসকলআউট ব্যবহার করা হয়
  2. রেসপন্স থেকে বাহ্যিকভাবে তৈরি টোকেনটি বের করার জন্য ExtractVariables অথবা একটি জাভাস্ক্রিপ্ট স্টেপ
  3. oauth_external_authorization_status নামক বিশেষ সুপরিচিত ভেরিয়েবলটি সেট করার জন্য AssignMessage ব্যবহার করা হয় । ক্লায়েন্টের ক্রেডেনশিয়াল বৈধ তা বোঝাতে এর মান অবশ্যই true হতে হবে।
  4. <ExternalAuthorization> এলিমেন্টটির মান true সেট করে এবং <ExternalAccessToken> , <ExternalRefreshToken> বা <ExternalAuthorizationCode> এর মধ্যে অন্তত একটি সহ OAuthV2 /GenerateAccessToken ব্যবহার করুন।

ক্লায়েন্টের পরিচয়পত্রের অভ্যন্তরীণ যাচাইকরণ

  • একটি বাহ্যিক টোকেন সংগ্রহ করার জন্য সার্ভিসকলআউট
  • রেসপন্স থেকে বাহ্যিকভাবে তৈরি টোকেনটি বের করার জন্য ExtractVariables অথবা একটি জাভাস্ক্রিপ্ট স্টেপ
  • <ExternalAuthorization> এলিমেন্টটির মান false সেট করে এবং <ExternalAccessToken> , <ExternalRefreshToken> বা <ExternalAuthorizationCode> এর মধ্যে অন্তত একটি সহ OAuthV2 /GenerateAccessToken ব্যবহার করুন।

প্রবাহ এবং নীতি কনফিগারেশন সম্পর্কিত নোট

  • যদি আপনি ক্লায়েন্টের পরিচয়পত্র যাচাই করার জন্য কোনো বাহ্যিক সিস্টেম ব্যবহার করতে চান, তবে প্রয়োজনীয় কাজটি করার জন্য একটি পলিসি ফ্লো তৈরি করার দায়িত্ব আপনার। সাধারণত, আপনি বাহ্যিকভাবে স্বীকৃত পরিচয়পত্রগুলো বাহ্যিক প্রমাণীকরণ পরিষেবাতে পাঠানোর জন্য একটি সার্ভিসকলআউট (ServiceCallout) পলিসি ব্যবহার করবেন। বাহ্যিক প্রমাণীকরণ পরিষেবাটি সাধারণত একটি প্রতিক্রিয়া এবং, যদি পরিচয়পত্রগুলো বৈধ হয়, একটি অ্যাক্সেস টোকেনও ফেরত দেবে।

  • ServiceCallout-এর পরে, API প্রক্সিকে রেসপন্সটি পার্স করে ভ্যালিডিটি স্ট্যাটাস, সেইসাথে বাহ্যিকভাবে তৈরি access_token এবং সম্ভবত refresh_token বের করতে হয়।

  • OAuthV2/GenerateAccessToken পলিসিতে, <StoreToken> এলিমেন্টটিকে true তে সেট করুন এবং প্রয়োজন অনুযায়ী <ExternalAuthorization> এলিমেন্টটিকে true বা false তে সেট করুন।

    যখন OAuthV2/GenerateAccessToken পলিসিটি কার্যকর হয়, তখন এটি oauth_external_authorization_status ভেরিয়েবলটি পড়ে। যদি ভেরিয়েবলটি সেট করা থাকে এবং এর মান 'true' হয়, তাহলে Apigee Edge ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই করার চেষ্টা করে না। যদি ভেরিয়েবলটি সেট করা না থাকে অথবা এর মান 'true' না হয়, তাহলে Apigee Edge ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই করার চেষ্টা করবে।

  • OAuthV2 পলিসির তিনটি উপাদান রয়েছে যা আপনাকে ইম্পোর্ট করার জন্য এক্সটার্নাল ডেটা নির্দিষ্ট করতে দেয়: <ExternalAccessToken> , <ExternalRefreshToken> , এবং <ExternalAuthorizationCode> । এই উপাদানগুলোর প্রত্যেকটি একটি ফ্লো ভ্যারিয়েবল গ্রহণ করে। Edge পলিসিটি বাইরে থেকে তৈরি হওয়া অ্যাক্সেস টোকেন, রিফ্রেশ টোকেন, বা অথরাইজেশন কোড খুঁজে বের করার জন্য সেই ভ্যারিয়েবলটি পড়ে। এক্সটার্নাল টোকেন বা কোডগুলোকে উপযুক্ত ভ্যারিয়েবলে রাখার জন্য পলিসি এবং লজিক প্রয়োগ করার দায়িত্ব আপনার।

    উদাহরণস্বরূপ, OAuthV2 পলিসির নিম্নলিখিত কনফিগারেশনটি Edge-কে external_token নামের একটি কনটেক্সট ভেরিয়েবলে টোকেনটি খুঁজতে নির্দেশ দেয়।

    <ExternalAccessToken>external_token</ExternalAccessToken>

    এর আগেও এমন একটি ধাপ থাকতে হবে যা ওই ভেরিয়েবলটি সেট করে।

  • oauth_external_authorization_status ভেরিয়েবলটি সেট করার ক্ষেত্রে, একটি প্রচলিত কৌশল হলো AssignVariable এলিমেন্টসহ একটি AssignMessage পলিসি ব্যবহার করা, যেমনটি নিচে দেখানো হলো:

    <AssignMessage name="AssignMessage-SetVariable">
        <DisplayName>Assign Message - Set Variable</DisplayName>
        <AssignVariable>
            <Name>oauth_external_authorization_status</Name>
            <Value>true</Value>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    </AssignMessage>

    মনে রাখবেন, এই পলিসিটি অবশ্যই Operation = GenerateAccessToken যুক্ত OAuthV2 পলিসির আগে থাকতে হবে।

OAuthV2 নীতির উদাহরণ

নিম্নলিখিত OAuthV2 পলিসিটি একটি Apigee Edge অ্যাক্সেস টোকেন তৈরি করে, যদি Edge external_access_token ফ্লো ভেরিয়েবলে একটি টোকেন ভ্যালু খুঁজে পায়।

<OAuthV2 name="OAuth-v20-Store-External-Token">
    <ExternalAccessToken>external_access_token</ExternalAccessToken>
    <ExternalAuthorization>true</ExternalAuthorization>
    <Operation>GenerateAccessToken</Operation>
    <GenerateResponse enabled="true">
        <Format>FORM_PARAM</Format>
    </GenerateResponse>
    <ReuseRefreshToken>false</ReuseRefreshToken>
    <StoreToken>true</StoreToken>
    <SupportedGrantTypes>
        <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <ExpiresIn ref='flow.variable'>2400000</ExpiresIn>
</OAuthV2>

তাত্ত্বিকভাবে, আপনি যেকোনো তৃতীয় পক্ষের OAuth2 অনুমোদন পরিষেবার ক্ষেত্রে এই প্যাটার্নটি প্রয়োগ করতে পারেন।