থার্ড-পার্টি OAuth টোকেন ব্যবহার করা

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

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

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

উদাহরণ

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

এটা কী?

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

কিছু ব্যাকগ্রাউন্ড

সাধারণত, Apigee Edge বর্ণ ও সংখ্যার র‍্যান্ডম স্ট্রিং তৈরি করে টোকেন জেনারেট করে। Apigee Edge সেই টোকেনের সাথে যুক্ত থাকে, টোকেন ইস্যু করার সময়, মেয়াদ শেষ হওয়ার তারিখ, টোকেনটি বৈধ এমন API প্রোডাক্টের তালিকা এবং স্কোপের মতো অন্যান্য ডেটা। এইসব তথ্য অপারেশন = 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 নীতি সহ অপারেশন = 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"
}

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

ক্লায়েন্টের ক্রেডেনশিয়াল যাচাই করা সম্পর্কে আলোচনা করা যাক

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

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

প্রত্যক্ষ বা পরোক্ষভাবে, কোনও না কোনও উপায়ে, আপনাকে নিশ্চিত করতে হবে যে টোকেন জেনারেট করা API Proxy প্রথমে ক্লায়েন্ট ক্রেডেনশিয়াল যাচাই করে। মনে রাখবেন যে ক্লায়েন্টকে ভ্যালিডেট করা অ্যাক্সেস টোকেন জেনারেট করার থেকে আলাদা। আপনি 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. ServiceCallout ইনবাউন্ড ক্লায়েন্ট ক্রেডেনশিয়াল যাচাই করতে এবং এক্সটার্নাল টোকেন পেতে।
  2. ExtractVariables বা JavaScript step ব্যবহার করে উত্তর থেকে এক্সটার্নালি তৈরি টোকেন এক্সট্র্যাক্ট করুন।
  3. AssignMessage-এর মাধ্যমে oauth_external_authorization_status নামের বিশেষ সুপরিচিত ভেরিয়েবল সেট করুন। ক্লায়েন্ট ক্রেডেনশিয়াল সঠিক হলে, ভ্যালু true হতে হবে।
  4. OAuthV2/GenerateAccessToken-এর সাথে <ExternalAuthorization> এলিমেন্ট true হিসেবে সেট করা এবং অন্তত একটি <ExternalAccessToken>, <ExternalRefreshToken> বা <ExternalAuthorizationCode>.

ইন্টার্নাল ক্লায়েন্ট ক্রেডেনশিয়ালের যাচাইকরণ

  • এক্সটার্নাল টোকেন পাওয়ার জন্য ServiceCallout ব্যবহার করুন।
  • ExtractVariables বা JavaScript step ব্যবহার করে উত্তর থেকে এক্সটার্নালি তৈরি টোকেন এক্সট্র্যাক্ট করুন।
  • OAuthV2/GenerateAccessToken-এর সাথে <ExternalAuthorization> এলিমেন্ট false হিসেবে সেট করা এবং অন্তত একটি <ExternalAccessToken>, <ExternalRefreshToken> বা <ExternalAuthorizationCode>.

ফ্লো ও নীতি কনফিগারেশন সংক্রান্ত নোট

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

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

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

    OAuthV2/GenerateAccessToken নীতি এক্সিকিউট হলে, এটি variable oauth_external_authorization_status পড়ে। ভেরিয়েবল সেট করা থাকলে এবং ভ্যালু true হলে, Apigee Edge ক্লায়েন্ট ক্রেডেনশিয়াল যাচাই করার চেষ্টা করে না। variable সেট করা না থাকলে অথবা ভ্যালু 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>

    মনে রাখবেন, এই নীতিকে অবশ্যই OAuthV2 নীতির আগে থাকতে হবে, যেখানে Operation = GenerateAccessToken.

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 অনুমোদন পরিষেবার সাথে এই প্যাটার্ন প্রয়োগ করতে পারেন।