অনুমোদন কোড অনুদান প্রকার বাস্তবায়ন

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

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

এই বিষয় সম্পর্কে

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

ভিডিও

আপনার API-গুলোকে সুরক্ষিত করতে OAuth 2.0 অথরাইজেশন গ্রান্ট টাইপ কীভাবে ব্যবহার করবেন তা জানতে একটি সংক্ষিপ্ত ভিডিও দেখুন।

ব্যবহারের ক্ষেত্র

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

কোডের নমুনা

আপনি GitHub-এর api-platform-samples রিপো-তে Apigee Edge-এর অথরাইজেশন কোড গ্র্যান্ট টাইপের একটি সম্পূর্ণ ও কার্যকরী নমুনা ইমপ্লিমেন্টেশন খুঁজে পেতে পারেন। api-platform-samples/sample-proxies ডিরেক্টরিতে থাকা oauth-advanced নমুনাটি দেখুন। নমুনাটি সম্পর্কে বিস্তারিত জানতে README ফাইলটি দেখুন।

প্রবাহ চিত্র

নিম্নলিখিত ফ্লো ডায়াগ্রামটি Apigee Edge-কে অথরাইজেশন সার্ভার হিসেবে ব্যবহার করে অথরাইজেশন কোড OAuth ফ্লো-টি চিত্রিত করে।

পরামর্শ: এই ডায়াগ্রামটির একটি বড় সংস্করণ দেখতে, এটির উপর রাইট-ক্লিক করে একটি নতুন ট্যাবে খুলুন, অথবা এটি সেভ করে কোনো ইমেজ ভিউয়ারে খুলুন।

অনুমোদন কোড প্রবাহের ধাপসমূহ

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

পূর্বশর্ত: ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট কী পেতে ক্লায়েন্ট অ্যাপটিকে অবশ্যই Apigee Edge-এর সাথে নিবন্ধিত করতে হবে। বিস্তারিত জানতে ‘ক্লায়েন্ট অ্যাপ নিবন্ধন’ দেখুন।

১. ব্যবহারকারী প্রবাহটি শুরু করেন

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

২. ব্যবহারকারী পরিচয়পত্র প্রবেশ করান।

ব্যবহারকারী এখন একটি লগইন পৃষ্ঠা দেখতে পাবেন যেখানে তাকে তার লগইন তথ্য প্রবেশ করতে বলা হবে। লগইন সফল হলে, আমরা পরবর্তী ধাপে যাই।

৩. ব্যবহারকারী সম্মতি দেন

এই ধাপে, ব্যবহারকারী অ্যাপটিকে তাদের রিসোর্স অ্যাক্সেস করার অনুমতি দেন। সম্মতি ফর্মে সাধারণত স্কোপ সিলেকশন বা পরিধি নির্বাচনের সুযোগ থাকে, যেখানে ব্যবহারকারী বেছে নিতে পারেন যে অ্যাপটি রিসোর্স সার্ভারে কী কী করতে পারবে। উদাহরণস্বরূপ, ব্যবহারকারী শুধুমাত্র পড়ার (read-only) অনুমতি দিতে পারেন, অথবা অ্যাপটিকে রিসোর্স আপডেট করার অনুমতি দিতে পারেন।

৪. লগইন অ্যাপটি Apigee Edge-এ একটি অনুরোধ পাঠায়।

লগইন এবং সম্মতি সফল হলে, লগইন অ্যাপটি Apigee Edge-এর /authorizationcode এন্ডপয়েন্টে ডেটা POST করে। এই ডেটার মধ্যে থাকে রিডাইরেক্ট URI, ক্লায়েন্ট আইডি, স্কোপ, ব্যবহারকারী-সম্পর্কিত যেকোনো তথ্য যা অ্যাপটি অন্তর্ভুক্ত করতে চায়, এবং লগইন সফল হওয়ার একটি ইঙ্গিত।

৫. Apigee Edge একটি অনুমোদন কোড তৈরি করে।

যখন Edge তার /authorizationcode এন্ডপয়েন্টে লগইন অ্যাপ থেকে POST রিকোয়েস্ট গ্রহণ করে, তখন দুটি ঘটনা ঘটে। প্রথমত, Edge রিকোয়েস্ট প্যারামিটার বা হেডারে সফলতার সূচক পরীক্ষা করে লগইন সফল হয়েছে কিনা তা নির্ধারণ করে। এরপর, Edge নিশ্চিত করে যে লগইন অ্যাপ থেকে পাঠানো রিডাইরেক্ট URI-টি Apigee Edge-এ অ্যাপটি রেজিস্টার করার সময় নির্দিষ্ট করা রিডাইরেক্ট URI-এর সাথে মেলে কিনা। সবকিছু ঠিক থাকলে, Edge একটি অথরাইজেশন কোড তৈরি করে।

{redirect_uri}?code={authorization_code}&state={some_string}

৬. ক্লায়েন্ট অনুমোদন কোডটি সংগ্রহ করে এবং Edge থেকে একটি অ্যাক্সেস টোকেনের জন্য অনুরোধ করে।

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

$ curl https://{org_name}-test.apigee.net/my_oauth_proxy/accesstoken?code=Xyz123&grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpKNhGar6K&client_secret=hAr4GngA9vAyvI4'

৭. ক্লায়েন্ট একটি অ্যাক্সেস টোকেন পায়।

সবকিছু সফল হলে, Edge ক্লায়েন্টকে একটি অ্যাক্সেস টোকেন ফেরত পাঠায়। এই অ্যাক্সেস টোকেনের একটি মেয়াদ থাকবে এবং ব্যবহারকারী যখন অ্যাপটিকে তার রিসোর্স অ্যাক্সেস করার অনুমতি দিয়েছিলেন, তখন তার দ্বারা নির্দিষ্ট করা পরিধির মধ্যেই এটি বৈধ থাকবে।

৮. ক্লায়েন্ট সুরক্ষিত এপিআই-কে কল করে।

এখন, একটি বৈধ অ্যাক্সেস টোকেন দিয়ে ক্লায়েন্ট সুরক্ষিত এপিআই-তে কল করতে পারে। এই ক্ষেত্রে, অনুরোধগুলি Apigee Edge (প্রক্সি)-তে পাঠানো হয়, এবং টার্গেট রিসোর্স সার্ভারে এপিআই কলটি পাঠানোর আগে অ্যাক্সেস টোকেনটি যাচাই করার দায়িত্ব Edge-এর থাকে। অ্যাক্সেস টোকেনগুলি একটি Authorization হেডারে পাঠানো হয়। উদাহরণস্বরূপ:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

প্রবাহ এবং নীতিমালা কনফিগার করা

অথরাইজেশন সার্ভার হিসেবে Edge-কে বিভিন্ন ধরনের OAuth রিকোয়েস্ট প্রসেস করতে হয়, যেমন: অ্যাক্সেস টোকেন, অথ কোড, রিফ্রেশ টোকেন, লগইন পেজে রিডাইরেক্ট ইত্যাদি। এই এন্ডপয়েন্টগুলো কনফিগার করার জন্য দুটি মৌলিক ধাপ রয়েছে:

  • কাস্টম ফ্লো তৈরি করা
  • OAuthV2 পলিসি যোগ এবং কনফিগার করা

কাস্টম ফ্লো কনফিগারেশন

আপনি সাধারণত এই গ্রান্ট টাইপ ফ্লোটি এমনভাবে কনফিগার করেন যাতে ফ্লো-এর প্রতিটি ধাপ বা "লেগ" Apigee Edge প্রক্সির একটি ফ্লো দ্বারা সংজ্ঞায়িত হয়। প্রতিটি ফ্লো-এর একটি এন্ডপয়েন্ট এবং একটি পলিসি থাকে যা প্রয়োজনীয় OAuth-নির্দিষ্ট কাজটি সম্পাদন করে, যেমন একটি অথরাইজেশন কোড বা একটি অ্যাক্সেস টোকেন তৈরি করা। উদাহরণস্বরূপ, নীচের XML-এ যেমন দেখানো হয়েছে, /oauth/authorizationcode এন্ডপয়েন্টটির সাথে GenerateAuthCode নামে একটি সংশ্লিষ্ট পলিসি রয়েছে (যা GenerateAuthorizationCode অপারেশনটি নির্দিষ্ট করা একটি OAuthV2 পলিসি)।

ফ্লো কনফিগারেশন দেখানোর সবচেয়ে সহজ উপায় হলো একটি XML উদাহরণ ব্যবহার করা। প্রতিটি ফ্লো সম্পর্কে তথ্যের জন্য ইন-লাইন কমেন্টগুলো দেখুন। এটি একটি উদাহরণ মাত্র — ফ্লো এবং পাথের নাম আপনি আপনার ইচ্ছামতো কনফিগার করতে পারেন। এই ধরনের একটি কাস্টম ফ্লো তৈরি করার জন্য প্রয়োজনীয় ধাপগুলোর একটি সংক্ষিপ্ত বিবরণের জন্য ‘Configuring OAuth endpoints and policies’ অংশটিও দেখুন।

গিটহাবে থাকা উদাহরণ বাস্তবায়নটিও দেখুন।

<Flows>
<Flow name="RedirectToLoginApp">
<!--
Publish this URI to developers to use for their 'login' link
-->
<Condition>proxy.pathsuffix == "/oauth/authorize"</Condition>
<Request>
<Step><Name>RedirectToLoginPage</Name></Step>
</Request>
</Flow>
<Flow name="GetAuthCode">
<!--
Call this URL from your Login app after you authenticate the user.
The policy will automatically return the auth code in the response to the
redirect_uri registered by the calling app
-->
<Condition>proxy.pathsuffix == "/oauth/authorizationcode"</Condition>
<Request>
<Step><Name>GenerateAuthCode</Name></Step>
</Request>
</Flow>
<Flow name="GetAccessToken">
<!-- This policy flow is triggered when the URI path suffix
matches /oauth/accesstoken. Publish this URL to app developers
to use when obtaining an access token using an auth code
-->
<Condition>proxy.pathsuffix == "/oauth/accesstoken"</Condition>
<Request>
<Step><Name>GenerateAccessToken</Name></Step>
</Request>
</Flow>
</Flows>

পলিসি ব্যবহার করে ফ্লোগুলো কনফিগার করুন।

প্রতিটি এন্ডপয়েন্টের সাথে একটি পলিসি যুক্ত থাকে। চলুন পলিসিগুলোর কিছু উদাহরণ দেখি। প্রক্সি এন্ডপয়েন্টগুলোতে OAuthV2 পলিসি যোগ করার জন্য প্রয়োজনীয় ধাপগুলোর একটি সংক্ষিপ্ত বিবরণের জন্য “Configuring OAuth endpoints and policies” অংশটিও দেখুন।

লগইন পুনঃনির্দেশ

এটি হলো /oauth/authorize পাথ। সংযুক্ত পলিসিটি ব্যবহারকারীকে একটি লগইন অ্যাপে রিডাইরেক্ট করার জন্য দায়ী, যেখানে ব্যবহারকারী ক্লায়েন্ট অ্যাপের কাছে তার ইউজারনেম এবং পাসওয়ার্ড প্রকাশ না করেই নিরাপদে প্রমাণীকরণ এবং তাদের সুরক্ষিত রিসোর্স অ্যাক্সেস করার জন্য অনুমোদন দিতে পারেন। আপনি একটি সার্ভিস কলআউট পলিসি, জাভাস্ক্রিপ্ট, নোড.জেএস বা অন্য কোনো উপায়ে এটি করতে পারেন।

অনুরোধটি করার জন্য এপিআই কলটি একটি GET কল এবং এর জন্য client_id, response_type, redirect_uri, scope, ও state এই কোয়েরি প্যারামিটারগুলো প্রয়োজন।

$ curl http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}

প্রমাণীকরণ কোড পান

এটি হলো /oauth/authorizationcode পাথ। এটি GenerateAuthorizationCode অপারেশনটি নির্দিষ্ট করে OAuthV2 পলিসি ব্যবহার করে।

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GetAuthCode">
    <DisplayName>GetAuthCode</DisplayName>
    <Operation>GenerateAuthorizationCode</Operation>
    <ExpiresIn>600000</ExpiresIn>
    <GenerateResponse/>
</OAuthV2>

অথরাইজেশন কোড পাওয়ার জন্য এপিআই কলটি একটি POST রিকোয়েস্ট এবং এর জন্য client_id, response_type, redirect_uri, এবং ঐচ্ছিকভাবে scope ও state-কে রিকোয়েস্ট বডিতে ফর্ম প্যারামিটার হিসেবে পাস করতে হয়, যেমনটি এই উদাহরণে দেখানো হয়েছে:

$ curl http://myorg-test.apigee.net/oauth/authorizationcode -X POST -d 'client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}'

অ্যাক্সেস টোকেন পান

এই পলিসিটি /oauth/accesstoken পাথের সাথে সংযুক্ত। এটি GenerateAccessToken অপারেশন নির্দিষ্ট করা OAuthV2 পলিসি ব্যবহার করে। এক্ষেত্রে, grant_type প্যারামিটারটি একটি কোয়েরি প্যারাম হিসেবে প্রত্যাশিত:

<OAuthV2 name="GetAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>360000000</ExpiresIn>
    <SupportedGrantTypes>
        <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GrantType>request.queryparam.grant_type</GrantType>
    <GenerateResponse/>
</OAuthV2>

অ্যাক্সেস টোকেন পাওয়ার জন্য এপিআই কলটি একটি POST রিকোয়েস্ট এবং এতে অবশ্যই অথরাইজেশন কোড, ক্লায়েন্ট_আইডি, ক্লায়েন্ট_সিক্রেট, grant_type=authorization_code, এবং ঐচ্ছিকভাবে, স্কোপ অন্তর্ভুক্ত থাকতে হবে। উদাহরণস্বরূপ:

$ curl https://{org_name}-test.apigee.net/oauth/accesstoken?grant_type=authorization_code -X POST -d 'code={authorization_code}&client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'

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

অ্যাক্সেস টোকেন যাচাইকরণ নীতি সংযুক্ত করা হচ্ছে

সুরক্ষিত এপিআই (API) অ্যাক্সেস করে এমন যেকোনো ফ্লো-এর শুরুতে একটি VerifyAccessToken পলিসি (VerifyAccessToken অপারেশন নির্দিষ্ট করা একটি OAuthV2 পলিসি) সংযুক্ত করুন, যাতে সুরক্ষিত রিসোর্সের জন্য কোনো অনুরোধ এলেই এটি কার্যকর হয়। Edge প্রতিটি অনুরোধে একটি বৈধ অ্যাক্সেস টোকেন আছে কিনা তা যাচাই করে। যদি না থাকে, তাহলে একটি ত্রুটি দেখানো হয়। প্রাথমিক ধাপগুলোর জন্য, ‘অ্যাক্সেস টোকেন যাচাইকরণ’ দেখুন।

<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
    <DisplayName>VerifyAccessToken</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="true"/>
    <Tokens/>
</OAuthV2>

সুরক্ষিত এপিআই কল করা হচ্ছে

OAuth 2.0 নিরাপত্তা দ্বারা সুরক্ষিত কোনো API কল করতে, আপনাকে একটি বৈধ অ্যাক্সেস টোকেন উপস্থাপন করতে হবে। সঠিক পদ্ধতিটি হলো Authorization হেডারে টোকেনটি অন্তর্ভুক্ত করা, যেমনটি নিচে দেখানো হলো: উল্লেখ্য যে, অ্যাক্সেস টোকেনকে 'বেয়ারার টোকেন' নামেও উল্লেখ করা হয়।

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282

আরও দেখুন অ্যাক্সেস টোকেন পাঠানো