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

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

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

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

উদাহরণ

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

এটা কি?

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

কিছু পটভূমি

স্বাভাবিক ক্ষেত্রে, 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"
}

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

অন্যদিকে, এখানে বর্ণিত ধাপগুলি অনুসরণ করে, আপনি একটি টোকেন সংরক্ষণ করতে এজ কনফিগার করতে পারেন যাতে এর অ্যাক্সেস_টোকেন মানটি একটি বহিরাগত পরিষেবা দ্বারা উত্পন্ন কিছু। অন্যান্য মেটাডেটা সব একই হতে পারে. উদাহরণস্বরূপ, ধরুন আপনার কাছে Apigee Edge-এর বাহ্যিক একটি সিস্টেম আছে যা "TOKEN-< 16 র্যান্ডম সংখ্যা >" ফর্মের টোকেন তৈরি করে। সেই ক্ষেত্রে, 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"
}

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

আসুন ক্লায়েন্ট শংসাপত্র যাচাইকরণ সম্পর্কে কথা বলি

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

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

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

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

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

Apigee-এ তৃতীয় পক্ষের OAuth-এর জন্য নীতি প্রবাহ

Apigee Edge-এ থার্ড-পার্টি OAuth সিস্টেম থেকে টোকেন ব্যবহার করতে, অ্যাক্সেস টোকেন জেনারেট করার প্রবাহকে নিম্নলিখিত প্যাটার্নগুলির মধ্যে একটি অনুসরণ করা উচিত।

ক্লায়েন্ট শংসাপত্রের বাহ্যিক বৈধতা

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

ক্লায়েন্ট শংসাপত্রের অভ্যন্তরীণ বৈধতা

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

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

  • ServiceCallout এর পরে, API প্রক্সিকে বৈধতার স্থিতি, সেইসাথে বাহ্যিকভাবে জেনারেট করা অ্যাক্সেস_টোকেন এবং সম্ভবত refresh_token বের করতে প্রতিক্রিয়া পার্স করতে হবে।

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

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

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

    উদাহরণস্বরূপ, OAuthV2 নীতিতে নিম্নলিখিত কনফিগারেশনটি এজকে 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 এজ অ্যাক্সেস টোকেন তৈরি করে যে এজ ফ্লো ভেরিয়েবল 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 অনুমোদন পরিষেবার সাথে এই প্যাটার্নটি প্রয়োগ করতে পারেন।