অনুমোদন কোড গ্রান্টের ধরন প্রয়োগ করা

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

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

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

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

ভিডিও

আপনার API সুরক্ষিত করতে OAuth 2.0 অনুমোদন গ্র্যান্টের ধরন কীভাবে ব্যবহার করতে হয় তা জানতে একটি ছোট ভিডিও দেখুন।

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

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

কোডের স্যাম্পেল

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

ফ্লো ডায়াগ্রাম

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

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

অনুমোদন কোড ফ্লোতে ধাপ

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

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

১. ব্যবহারকারী ফ্লো শুরু করেন

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

২. ব্যবহারকারী ক্রেডেনশিয়াল লিখছেন

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

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

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

৪. লগ-ইন অ্যাপ 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 থেকে অ্যাক্সেস টোকেনের অনুরোধ করতে পারে। এটি নিম্নলিখিত তথ্য POST করে: ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেট কী (Edge-এ অ্যাপ রেজিস্টার করার সময় পাওয়া), অনুমোদন কোড, গ্র্যান্টের ধরন ও স্কোপ। ক্লায়েন্ট আইডি ও সিক্রেট কী অন্তর্ভুক্ত করার মাধ্যমে, 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 ক্লায়েন্টকে একটি অ্যাক্সেস টোকেন রিটার্ন করে। অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে যাবে এবং ব্যবহারকারী যখন অ্যাপকে তার রিসোর্স অ্যাক্সেস করার জন্য সম্মতি দিয়েছিলেন তখন তার উল্লেখ করা স্কোপের জন্যই এটি বৈধ হবে।

৮. ক্লায়েন্ট সুরক্ষিত API কল করে

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

$ 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 উদাহরণের মাধ্যমে ফ্লো কনফিগারেশন দেখানো সবচেয়ে সহজ। প্রতিটি ফ্লো সম্পর্কে তথ্য পেতে ইন-লাইন কমেন্ট দেখুন। এটি একটি উদাহরণ -- আপনি যেভাবে চান ফ্লো ও পাথের নাম কনফিগার করতে পারেন। এছাড়াও, এই ধরনের কাস্টম ফ্লো তৈরি করার জন্য প্রয়োজনীয় ধাপগুলির একটি সংক্ষিপ্ত ওভারভিউ পেতে OAuth এন্ডপয়েন্ট ও নীতি কনফিগার করা দেখুন।

এছাড়াও, GitHub-এ উদাহরণ প্রয়োগ দেখুন।

<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 নীতি যোগ করার জন্য প্রয়োজনীয় ধাপগুলির একটি সংক্ষিপ্ত ওভারভিউ পেতে OAuth কনফিগার করা এন্ডপয়েন্ট ও নীতি দেখুন।

লগ-ইন রিডাইরেক্ট

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

অনুরোধ করার জন্য API কল হল একটি GET এবং এর জন্য query প্যারামিটার 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}
ব্যবহার করে কোনও অ্যাপ রেজিস্টার করার সময় কলব্যাক URL ডিফাইন করা হয়।

অনুমোদন কোড পান

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

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

অনুমোদন কোড পাওয়ার জন্য API কল হল একটি 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>

অ্যাক্সেস টোকেন পাওয়ার জন্য API কল হল একটি POST এবং এতে অবশ্যই অনুমোদন কোড, client_id, client_secret, grant_type=authorization_code এবং ঐচ্ছিকভাবে, scope থাকতে হবে। যেমন:

$ 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'

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

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

সুরক্ষিত API অ্যাক্সেস করে এমন যেকোনও ফ্লোয়ের শুরুতে VerifyAccessToken নীতি (VerifyAccessToken অপারেশন সহ OAuthV2 নীতি নির্দিষ্ট করা আছে) অ্যাটাচ করুন, যাতে সুরক্ষিত রিসোর্সের জন্য কোনও অনুরোধ এলে এটি এক্সিকিউট করা হয়। প্রতিটি অনুরোধে সঠিক অ্যাক্সেস টোকেন আছে কিনা তা নিশ্চিত করতে এজ চেক করা হয়। তা না হলে, একটি সমস্যা দেখানো হয়। প্রাথমিক ধাপের জন্য, অ্যাক্সেস টোকেন যাচাই করা দেখুন।

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

সুরক্ষিত API কল করা

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

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

এছাড়াও, অ্যাক্সেস টোকেন পাঠানো দেখুন।