অ্যাক্সেস টোকেন ও অনুমোদন কোডের জন্য অনুরোধ করা

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

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

নমুনা কোড

আপনার সুবিধার জন্য, এই বিষয়ে আলোচিত নীতি ও এন্ডপয়েন্টগুলি Apigee api-platform-samples রিপোজিটরিতে oauth-doc-examples প্রোজেক্টে GitHub-এ উপলভ্য। আপনি স্যাম্পেল কোড ডেপ্লয় করতে এবং এই বিষয়ে দেখানো স্যাম্পেল অনুরোধগুলি ব্যবহার করে দেখতে পারবেন। বিস্তারিত জানতে প্রজেক্টের README দেখুন।

অ্যাক্সেস টোকেনের অনুরোধ করা হচ্ছে: অনুমোদন কোড গ্রান্টের ধরন

এই বিভাগে, অনুমোদন কোড গ্র্যান্ট টাইপ ফ্লো ব্যবহার করে কীভাবে অ্যাক্সেস টোকেনের অনুরোধ করতে হয় তা ব্যাখ্যা করা হয়েছে। OAuth 2.0 গ্র্যান্টের ধরন সম্পর্কে জানতে, OAuth 2.0-এর ভূমিকা দেখুন।

নমুনা অনুরোধ

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
   -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'

প্রয়োজনীয় প্যারামিটার

ডিফল্ট হিসেবে, এইসব প্যারামিটারকে x-www-form-urlencoded হতে হবে এবং অনুরোধের বডিতে উল্লেখ করতে হবে (উপরে দেওয়া নমুনাতে দেখানো হয়েছে); তবে, এই ডিফল্টকে পরিবর্তন করা সম্ভব, এর জন্য /accesstoken এন্ডপয়েন্টের সাথে অ্যাটাচ করা OAuthV2 নীতিতে <GrantType>, <Code> এবং <RedirectUri> এলিমেন্ট কনফিগার করতে হবে। আরও বিবরণের জন্য, OAuthV2 নীতি দেখুন।

  • grant_type - এর মান authorization_code হতে হবে।
  • code - /authorize এন্ডপয়েন্ট থেকে পাওয়া অনুমোদন কোড (অথবা আপনি যে নামেই ডাকুন না কেন)। অনুমোদন কোড গ্রান্ট টাইপ ফ্লোতে অ্যাক্সেস টোকেনের অনুরোধ করতে, আপনাকে প্রথমে একটি অনুমোদন কোড পেতে হবে। নিচে অনুমোদন কোডের জন্য অনুরোধ করা দেখুন। এছাড়াও, অনুমোদন কোড গ্রান্টের ধরন প্রয়োগ করা দেখুন।
  • redirect_uri - আগের অনুমোদন কোড সংক্রান্ত অনুরোধে redirect_uri প্যারামিটার অন্তর্ভুক্ত থাকলে আপনাকে এই প্যারামিটার দিতে হবে। যদি অনুমোদন কোডের অনুরোধে redirect_uri প্যারামিটার অন্তর্ভুক্ত না থাকে এবং আপনি এই প্যারামিটার প্রদান না করেন, তাহলে এই নীতি কলব্যাক URL-এর সেই ভ্যালু ব্যবহার করে যা ডেভেলপার অ্যাপ রেজিস্টার করার সময় প্রদান করা হয়েছিল।

ঐচ্ছিক প্যারামিটার

  • state - একটি স্ট্রিং যা উত্তরের সাথে ফেরত পাঠানো হবে। সাধারণত ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ প্রতিরোধ করতে ব্যবহৃত হয়।
  • স্কোপ - আপনাকে API প্রোডাক্টের তালিকা ফিল্টার করতে দেয়, যার সাথে মিন্ট করা টোকেন ব্যবহার করা যেতে পারে। স্কোপ সম্পর্কে বিস্তারিত তথ্য পেতে, OAuth2 স্কোপের সাথে কাজ করা দেখুন।

যাচাইকরণ

আপনাকে অবশ্যই ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেটকে Basic Authentication header (Base64-encoded) হিসেবে অথবা ফর্ম প্যারামিটার client_id ও client_secret হিসেবে পাস করতে হবে। আপনি রেজিস্টার করা ডেভেলপার অ্যাপ থেকে এই ভ্যালু পান। এছাড়াও, "এনকোডিং প্রাথমিক যাচাইকরণ সংক্রান্ত ক্রেডেনশিয়াল" দেখুন।

স্যাম্পেল এন্ডপয়েন্ট

অ্যাক্সেস টোকেন তৈরি করার জন্য এখানে একটি নমুনা এন্ডপয়েন্ট কনফিগারেশন দেওয়া হল। এটি GenerateAccessToken নীতি প্রয়োগ করবে, যা অবশ্যই authorization_code গ্র্যান্ট টাইপ কাজ করে এমনভাবে কনফিগার করতে হবে।

...
       <Flow name="generate-access-token">
            <Description>Generate a token</Description>
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

নমুনা নীতি

এটি একটি প্রাথমিক GenerateAccessToken নীতি যা authorization_code গ্র্যান্টের ধরন গ্রহণ করার জন্য কনফিগার করা হয়েছে। এই নীতির সাথে কনফিগার করতে পারবেন এমন ঐচ্ছিক কনফিগারেশন এলিমেন্ট সম্পর্কে তথ্য পেতে, OAuthV2 নীতি দেখুন।

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn>
    <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ফেরত

<GenerateResponse> চালু করা থাকলে, নীতিটি একটি JSON উত্তর দেয় যা নিচে দেখানো অ্যাক্সেস টোকেন অন্তর্ভুক্ত করে। authorization_code গ্র্যান্টের ধরন একটি অ্যাক্সেস টোকেন ও রিফ্রেশ টোকেন তৈরি করে, তাই উত্তরটি এইরকম হতে পারে:

{
    "issued_at": "1420262924658",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420262924658",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi",
    "organization_name": "docs",
    "refresh_token_expires_in": "86399", //--in seconds
    "refresh_count": "0"
}

<GenerateResponse> false হিসেবে সেট করা থাকলে, নীতি কোনও উত্তর ফেরত দেয় না। এর পরিবর্তে, এটি অ্যাক্সেস টোকেন গ্র্যান্টের সাথে সম্পর্কিত ডেটা সহ নিম্নলিখিত ফ্লো ভেরিয়েবলের সেট পূরণ করে।

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

যেমন:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

অ্যাক্সেস টোকেনের অনুরোধ করা হচ্ছে: ক্লায়েন্ট ক্রেডেনশিয়াল গ্র্যান্টের ধরন

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

নমুনা অনুরোধ

নিম্নলিখিত কলে প্রাথমিক যাচাইকরণ হেডার এনকোড করা সংক্রান্ত তথ্যের জন্য, দেখুন "প্রাথমিক যাচাইকরণ ক্রেডেনশিয়াল এনকোড করা"।

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

প্রয়োজনীয় প্যারামিটার

ডিফল্ট হিসেবে, অনুরোধের বডিতে প্রয়োজনীয় grant_type প্যারামিটার x-www-form-urlencoded এবং নির্দিষ্ট করতে হবে (উপরে দেওয়া নমুনাতে দেখানো হয়েছে); তবে, এই /accesstoken এন্ডপয়েন্টে অ্যাটাচ করা OAuthV2 পলিসিতে <GrantType> এলিমেন্ট কনফিগার করে এই ডিফল্ট পরিবর্তন করা সম্ভব। যেমন, আপনি কোয়েরি প্যারামিটারে প্যারামিটার পাস করার জন্য বেছে নিতে পারেন। আরও বিবরণের জন্য, OAuthV2 নীতি দেখুন।

  • grant_type - এর মান client_credentials হতে হবে।

ঐচ্ছিক প্যারামিটার

  • state - একটি স্ট্রিং যা উত্তরের সাথে ফেরত পাঠানো হবে। সাধারণত ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ প্রতিরোধ করতে ব্যবহৃত হয়।
  • স্কোপ - আপনাকে API প্রোডাক্টের তালিকা ফিল্টার করতে দেয়, যার সাথে মিন্ট করা টোকেন ব্যবহার করা যেতে পারে। স্কোপ সম্পর্কে বিস্তারিত তথ্য পেতে, OAuth2 স্কোপের সাথে কাজ করা দেখুন।

যাচাইকরণ

আপনাকে অবশ্যই ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেটকে Basic Authentication header (Base64-encoded) হিসেবে অথবা ফর্ম প্যারামিটার client_id ও client_secret হিসেবে পাস করতে হবে। অনুরোধের সাথে যুক্ত রেজিস্টার করা ডেভেলপার অ্যাপ থেকে আপনি এইসব ভ্যালু পান। এছাড়াও, "এনকোডিং প্রাথমিক যাচাইকরণ ক্রেডেনশিয়াল" দেখুন।

স্যাম্পেল এন্ডপয়েন্ট

অ্যাক্সেস টোকেন তৈরি করার জন্য এখানে একটি নমুনা এন্ডপয়েন্ট কনফিগারেশন দেওয়া হল। এটি GenerateAccessToken নীতি প্রয়োগ করবে, যা অবশ্যই client_credentials গ্রান্ট টাইপ কাজ করে এমনভাবে কনফিগার করতে হবে।

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

নমুনা নীতি

এটি একটি প্রাথমিক GenerateAccessToken নীতি যা client_credentials গ্র্যান্টের ধরন গ্রহণ করার জন্য কনফিগার করা হয়েছে। এই নীতির সাথে কনফিগার করতে পারবেন এমন ঐচ্ছিক কনফিগারেশন এলিমেন্ট সম্পর্কে তথ্য পেতে, OAuthV2 নীতি দেখুন।

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ফেরত

<GenerateResponse> চালু থাকলে, নীতিটি একটি JSON উত্তর দেয়। মনে রাখবেন client_credentials গ্র্যান্ট টাইপের ক্ষেত্রে রিফ্রেশ টোকেন কাজ করে না। শুধুমাত্র অ্যাক্সেস টোকেন তৈরি করা হয়। যেমন:

{
    "issued_at": "1420260525643",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav",
    "organization_name": "docs"
}

<GenerateResponse> false হিসেবে সেট করা থাকলে, নীতি কোনও উত্তর ফেরত দেয় না। এর পরিবর্তে, এটি অ্যাক্সেস টোকেন গ্র্যান্টের সাথে সম্পর্কিত ডেটা সহ নিম্নলিখিত ফ্লো ভেরিয়েবলের সেট পূরণ করে।

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds

যেমন:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in     //--in seconds

অ্যাক্সেস টোকেনের জন্য অনুরোধ করা: পাসওয়ার্ড গ্র্যান্টের ধরন

এই বিভাগে রিসোর্স মালিকের পাসওয়ার্ড ক্রেডেনশিয়াল (পাসওয়ার্ড) গ্রান্ট টাইপ ফ্লো ব্যবহার করে কীভাবে অ্যাক্সেস টোকেনের অনুরোধ করতে হয় তা ব্যাখ্যা করা হয়েছে। OAuth 2.0 গ্র্যান্টের ধরন সম্পর্কে জানতে, OAuth 2.0-এর ভূমিকা দেখুন।

পাসওয়ার্ড গ্র্যান্টের ধরন সম্পর্কে আরও বিস্তারিত জানতে, কীভাবে এটি প্রয়োগ করতে হয় তা দেখানো ৪ মিনিটের ভিডিও সহ, পাসওয়ার্ড গ্র্যান্টের ধরন প্রয়োগ করালিঙ্কে দেখুন।

নমুনা অনুরোধ

নিম্নলিখিত কলে প্রাথমিক যাচাইকরণ হেডার এনকোড করা সংক্রান্ত তথ্যের জন্য, দেখুন "প্রাথমিক যাচাইকরণ ক্রেডেনশিয়াল এনকোড করা"।

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST https://docs-test.apigee.net/oauth/token \
  -d 'grant_type=password&username=the-user-name&password=the-users-password'

প্রয়োজনীয় প্যারামিটার

ডিফল্ট হিসেবে, এইসব প্যারামিটারকে x-www-form-urlencoded হতে হবে এবং অনুরোধের বডিতে উল্লেখ করতে হবে (উপরে দেওয়া নমুনাতে দেখানো হয়েছে); তবে, এই ডিফল্টকে পরিবর্তন করা সম্ভব, এর জন্য /token এন্ডপয়েন্টের সাথে অ্যাটাচ করা OAuthV2 নীতিতে <GrantType>, <Username> এবং <Password> এলিমেন্ট কনফিগার করতে হবে। আরও বিবরণের জন্য, OAuthV2 নীতি দেখুন।

ব্যবহারকারীর ক্রেডেনশিয়াল সাধারণত LDAP বা জাভাস্ক্রিপ্ট নীতি ব্যবহার করে ক্রেডেনশিয়াল স্টোরের সাথে যাচাই করা হয়।

  • grant_type - এর মান password হিসেবে সেট করতে হবে।
  • username - রিসোর্স মালিকের ইউজারনেম।
  • পাসওয়ার্ড - রিসোর্স মালিকের পাসওয়ার্ড।

ঐচ্ছিক প্যারামিটার

  • state - একটি স্ট্রিং যা উত্তরের সাথে ফেরত পাঠানো হবে। সাধারণত ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ প্রতিরোধ করতে ব্যবহৃত হয়।
  • স্কোপ - আপনাকে API প্রোডাক্টের তালিকা ফিল্টার করতে দেয়, যার সাথে মিন্ট করা টোকেন ব্যবহার করা যেতে পারে। স্কোপ সম্পর্কে বিস্তারিত তথ্য পেতে, OAuth2 স্কোপের সাথে কাজ করা দেখুন।

যাচাইকরণ

আপনাকে অবশ্যই ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেটকে Basic Authentication header (Base64-encoded) হিসেবে অথবা ফর্ম প্যারামিটার client_id ও client_secret হিসেবে পাস করতে হবে। অনুরোধের সাথে যুক্ত রেজিস্টার করা ডেভেলপার অ্যাপ থেকে আপনি এইসব ভ্যালু পান। এছাড়াও, "এনকোডিং প্রাথমিক যাচাইকরণ ক্রেডেনশিয়াল" দেখুন।

নমুনা এন্ডপয়েন্ট

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

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

নমুনা নীতি

এটি একটি সাধারণ GenerateAccessToken নীতি যা পাসওয়ার্ড গ্র্যান্ট টাইপ গ্রহণ করার জন্য কনফিগার করা হয়েছে। এই নীতির সাথে কনফিগার করতে পারবেন এমন ঐচ্ছিক কনফিগারেশন এলিমেন্ট সম্পর্কে তথ্য পেতে, OAuthV2 নীতি দেখুন।

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ফেরত

<GenerateResponse> চালু থাকলে, নীতিটি একটি JSON উত্তর দেয়। মনে রাখবেন পাসওয়ার্ড গ্রান্ট টাইপের ক্ষেত্রে, অ্যাক্সেস টোকেন ও রিফ্রেশ টোকেন, দুটিই তৈরি করা হয়। যেমন:

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "0"
}

<GenerateResponse> false হিসেবে সেট করা থাকলে, নীতি কোনও উত্তর ফেরত দেয় না। এর পরিবর্তে, এটি অ্যাক্সেস টোকেন গ্র্যান্টের সাথে সম্পর্কিত ডেটা সহ নিম্নলিখিত ফ্লো ভেরিয়েবলের সেট পূরণ করে।

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

যেমন:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

অ্যাক্সেস টোকেনের অনুরোধ করা: ইমপ্লিসিট গ্র্যান্ট টাইপ

এই বিভাগে, কীভাবে ইমপ্লিসিট গ্র্যান্ট টাইপ ফ্লো ব্যবহার করে অ্যাক্সেস টোকেনের অনুরোধ করতে হয় তা ব্যাখ্যা করা হয়েছে। OAuth 2.0 গ্র্যান্টের ধরন সম্পর্কে জানতে, OAuth 2.0-এর ভূমিকা দেখুন।

নমুনা অনুরোধ

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'

প্রয়োজনীয় প্যারামিটার

ডিফল্ট হিসেবে, এইসব প্যারামিটারকে অবশ্যই কোয়েরি প্যারামিটার হতে হবে (উপরে দেওয়া নমুনায় যেমন দেখানো হয়েছে); তবে, এই /token এন্ডপয়েন্টের সাথে অ্যাটাচ করা OAuthV2 নীতিতে <ResponseType>, <ClientId> ও <RedirectUri> এলিমেন্ট কনফিগার করে এই ডিফল্ট পরিবর্তন করা সম্ভব। আরও বিবরণের জন্য, OAuthV2 নীতি দেখুন।

ব্যবহারকারীর ক্রেডেনশিয়াল সাধারণত LDAP পরিষেবা কলআউট বা JavaScript নীতি ব্যবহার করে ক্রেডেনশিয়াল স্টোরের সাথে যাচাই করা হয়।

  • response_type - এর মান token হিসেবে সেট করতে হবে।
  • client_id - রেজিস্টার করা ডেভেলপার অ্যাপের ক্লায়েন্ট আইডি।
  • redirect_uri - ক্লায়েন্ট ডেভেলপার অ্যাপ রেজিস্টার করার সময় কলব্যাক URI না দেওয়া হলে এই প্যারামিটারটি আবশ্যক। ক্লায়েন্ট রেজিস্ট্রেশনের সময় কোনও কলব্যাক URL দেওয়া থাকলে, এই ভ্যালুর সাথে সেটি তুলনা করা হবে এবং হুবহু মিলতে হবে।

ঐচ্ছিক প্যারামিটার

  • state - একটি স্ট্রিং যা উত্তরের সাথে ফেরত পাঠানো হবে। সাধারণত ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ প্রতিরোধ করতে ব্যবহৃত হয়।
  • স্কোপ - আপনাকে API প্রোডাক্টের তালিকা ফিল্টার করতে দেয়, যার সাথে মিন্ট করা টোকেন ব্যবহার করা যেতে পারে। স্কোপ সম্পর্কে বিস্তারিত তথ্য পেতে, OAuth2 স্কোপের সাথে কাজ করা দেখুন।

যাচাইকরণ

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

নমুনা এন্ডপয়েন্ট

অ্যাক্সেস টোকেন তৈরি করার জন্য এখানে একটি নমুনা এন্ডপয়েন্ট কনফিগারেশন দেওয়া হল। এটি GenerateAccessTokenImplicitGrant নীতি এক্সিকিউট করবে।

...
       <Flow name="generate-access-token-implicit">
            <Request>
                <Step>
                    <Name>GenerateAccessTokenImplicitGrant</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition>
        </Flow>
...

নমুনা নীতি

এটি একটি প্রাথমিক GenerateAccessTokenImplicitGrant নীতি যা ইমপ্লিসিট গ্র্যান্ট টাইপ ফ্লোয়ের জন্য টোকেন অনুরোধ প্রসেস করে। এই নীতির সাথে কনফিগার করতে পারবেন এমন ঐচ্ছিক কনফিগারেশন এলিমেন্ট সম্পর্কে তথ্য পেতে, OAuthV2 নীতি দেখুন।

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
    <DisplayName>GenerateAccessTokenImplicit</DisplayName>
    <Operation>GenerateAccessTokenImplicitGrant</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ফেরত

<GenerateResponse> চালু থাকলে, নীতিটি রেসপন্স হেডারে একটি 302 লোকেশন রিডাইরেক্ট রিটার্ন করে। রিডাইরেক্ট redirect_uri প্যারামিটারে উল্লেখ করা URL-এর দিকে নির্দেশ করে এবং অ্যাক্সেস টোকেন ও টোকেনের মেয়াদ শেষ হওয়ার সময় সহ যোগ করা হয়। মনে রাখবেন যে ইমপ্লিসিট গ্র্যান্ট টাইপ রিফ্রেশ টোকেন কাজ করে না। যেমন:

https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5

<GenerateResponse> false হিসেবে সেট করা থাকলে, নীতি কোনও উত্তর ফেরত দেয় না। এর পরিবর্তে, এটি অ্যাক্সেস টোকেন গ্র্যান্টের সাথে সম্পর্কিত ডেটা সহ নিম্নলিখিত ফ্লো ভেরিয়েবলের সেট পূরণ করে।

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in  //--in seconds

যেমন:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in   //--in seconds

অনুমোদন কোডের জন্য অনুরোধ করা

আপনি যদি অনুমোদনের কোড গ্রান্ট টাইপ ফ্লো ব্যবহার করেন, তাহলে অ্যাক্সেস টোকেনের অনুরোধ করার আগে আপনাকে একটি অনুমোদনের কোড পেতে হবে।

অনুরোধের নমুনা

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'

যেখানে OAuthV2 GenerateAuthorizationCode নীতি /oauth/authorize প্রক্সি এন্ডপয়েন্টে অ্যাটাচ করা আছে (নিচে এন্ডপয়েন্টের নমুনা দেখুন)।

প্রয়োজনীয় প্যারামিটার

ডিফল্ট হিসেবে, এইসব প্যারামিটারকে অবশ্যই কোয়েরি প্যারামিটার হতে হবে (উপরে দেওয়া নমুনায় যেমন দেখানো হয়েছে); তবে, এই /authorize এন্ডপয়েন্টের সাথে অ্যাটাচ করা OAuthV2 নীতিতে <ResponseType>, <ClientId> ও <RedirectUri> এলিমেন্ট কনফিগার করে এই ডিফল্ট পরিবর্তন করা সম্ভব। আরও বিবরণের জন্য, OAuthV2 নীতি দেখুন।

  • response_type - এর মান code হিসেবে সেট করতে হবে।
  • client_id - রেজিস্টার করা ডেভেলপার অ্যাপের ক্লায়েন্ট আইডি।

ঐচ্ছিক প্যারামিটার

  • redirect_uri - রেজিস্টার করা ক্লায়েন্ট অ্যাপে সম্পূর্ণ (আংশিক নয়) কলব্যাক URI উল্লেখ করা থাকলে, এই প্যারামিটার ঐচ্ছিক; অন্যথায়, এটি প্রয়োজন। কলব্যাক হল সেই URL যেখানে Edge নতুন তৈরি করা অথরাইজেশন কোড পাঠায়। এছাড়াও, অ্যাপ রেজিস্টার করা ও API কী ম্যানেজ করা দেখুন।
  • state - একটি স্ট্রিং যা উত্তরের সাথে ফেরত পাঠানো হবে। সাধারণত ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ প্রতিরোধ করতে ব্যবহৃত হয়।
  • স্কোপ - আপনাকে API প্রোডাক্টের তালিকা ফিল্টার করতে দেয়, যার সাথে মিন্ট করা টোকেন ব্যবহার করা যেতে পারে। স্কোপ সম্পর্কে বিস্তারিত তথ্য পেতে, OAuth2 স্কোপের সাথে কাজ করা দেখুন।

যাচাইকরণ

এর জন্য প্রাথমিক যাচাইকরণ প্রয়োজন হয় না, তবে রেজিস্টার করা ক্লায়েন্ট অ্যাপের ক্লায়েন্ট আইডি অবশ্যই অনুরোধে দিতে হবে।

স্যাম্পেল এন্ডপয়েন্ট

অনুমোদন কোড জেনারেট করার জন্য এখানে এন্ডপয়েন্ট কনফিগারেশনের একটি নমুনা দেওয়া হল:

<OAuthV2 name="GenerateAuthorizationCode">
  <Operation>GenerateAuthorizationCode</Operation>
    <!--
    ExpiresIn, in milliseconds. The ref is optional. The explicitly specified
    value is the default, when the variable reference cannot be resolved.
        60000 = 1 minute
       120000 = 2 minutes
    -->
  <ExpiresIn>60000</ExpiresIn>
  <GenerateResponse enabled="true"/>
</OAuthV2>

নমুনা নীতি

এটি হল একটি প্রাথমিক GenerateAuthorizationCode নীতি। এই নীতির সাথে কনফিগার করতে পারবেন এমন ঐচ্ছিক কনফিগারেশন এলিমেন্ট সম্পর্কে তথ্য পেতে, OAuthV2 নীতি দেখুন।

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ফেরত

<GenerateResponse> চালু করা থাকলে, নীতিটি ?code কোয়েরি প্যারামিটারকে redirect_uri (কলব্যাক URI) লোকেশনে অনুমোদন কোড অ্যাটাচ করে রিটার্ন করে। এটি 302 ব্রাউজার রিডাইরেক্টের মাধ্যমে পাঠানো হয় এবং এর সাথে উত্তরের Location হেডারে URL থাকে। যেমন: ?code=123456.

<GenerateResponse>-এর মান false হিসেবে সেট করা থাকলে, নীতিটি কোনও উত্তর ফেরত দেয় না। পরিবর্তে, এটি নিম্নলিখিত ফ্লো ভেরিয়েবলগুলিকে অথরাইজেশন কোড সম্পর্কিত ডেটা দিয়ে পূরণ করে।

oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id

যেমন:

oauthv2authcode.GenerateAuthorizationCode.code
oauthv2authcode.GenerateAuthorizationCode.scope
oauthv2authcode.GenerateAuthorizationCode.redirect_uri
oauthv2authcode.GenerateAuthorizationCode.client_id

অ্যাক্সেস টোকেন রিফ্রেশ করা

রিফ্রেশ টোকেন হল এমন একটি ক্রেডেনশিয়াল যা আপনি অ্যাক্সেস টোকেন পাওয়ার জন্য ব্যবহার করেন, সাধারণত অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে বা সেটি ভুল হয়ে গেলে এটি ব্যবহার করা হয়। আপনি অ্যাক্সেস টোকেন পেলে, উত্তরে একটি রিফ্রেশ টোকেন ফেরত দেওয়া হয়।

রিফ্রেশ টোকেন ব্যবহার করে নতুন অ্যাক্সেস টোকেনের অনুরোধ করতে:

অনুরোধের নমুনা

নিম্নলিখিত কলে প্রাথমিক যাচাইকরণ হেডার এনকোড করা সংক্রান্ত তথ্যের জন্য, দেখুন "প্রাথমিক যাচাইকরণ ক্রেডেনশিয়াল এনকোড করা"।

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \
  -d 'grant_type=refresh_token&refresh_token=my-refresh-token'

প্রয়োজনীয় প্যারামিটার

  • grant_type - এর মান refresh_token হিসেবে সেট করতে হবে।
  • refresh_token - আপনি যে অ্যাক্সেস টোকেন রিনিউ করতে চান সেটির সাথে যুক্ত রিফ্রেশ টোকেন।

ডিফল্ট হিসেবে, নীতিটি উপরে দেখানো উদাহরণের মতো অনুরোধের বডিতে উল্লেখ করা x-www-form-urlencoded প্যারামিটার হিসেবে এগুলি খোঁজে। এইসব ইনপুটের জন্য বিকল্প লোকেশন কনফিগার করতে, OAuthV2 নীতিতে আপনি <GrantType> এবং <RefreshToken> এলিমেন্ট ব্যবহার করতে পারবেন। আরও বিবরণের জন্য, OAuthV2 নীতি দেখুন।

ঐচ্ছিক প্যারামিটার

  • state - একটি স্ট্রিং যা উত্তরের সাথে ফেরত পাঠানো হবে। সাধারণত ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ প্রতিরোধ করতে ব্যবহৃত হয়।
  • স্কোপ - আপনাকে API প্রোডাক্টের তালিকা ফিল্টার করতে দেয়, যার সাথে মিন্ট করা টোকেন ব্যবহার করা যেতে পারে। স্কোপ সম্পর্কে বিস্তারিত তথ্য পেতে, OAuth2 স্কোপের সাথে কাজ করা দেখুন।

যাচাইকরণ

  • client_id
  • client_secret

আপনাকে অবশ্যই ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেটকে Basic Authentication header (Base64-encoded) হিসেবে অথবা ফর্ম প্যারামিটার client_id ও client_secret হিসেবে পাস করতে হবে। এছাড়াও, "যাচাইকরণের প্রাথমিক ক্রেডেনশিয়াল এনকোড করা" দেখুন।

অ্যাক্সেস টোকেন রিফ্রেশ করার সময় ব্যবহারকারীকে আবার যাচাই করা হয় না।

রিফ্রেশ টোকেন ব্যবহার করে অ্যাক্সেস টোকেন তৈরি করার জন্য এখানে একটি নমুনা এন্ডপয়েন্ট কনফিগারেশন দেওয়া হল। এটি RefreshAccessToken নীতি প্রয়োগ করবে।

 ...
       <Flow name="generate-refresh-token">
            <Request>
                <Step>
                    <Name>RefreshAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
       </Flow>
...

নমুনা নীতি

এটি একটি সাধারণ RefreshAccessToken নীতি যা refresh_token গ্র্যান্টের ধরন গ্রহণ করার জন্য কনফিগার করা হয়েছে। এই নীতির সাথে কনফিগার করতে পারবেন এমন ঐচ্ছিক কনফিগারেশন এলিমেন্ট সম্পর্কে তথ্য পেতে, OAuthV2 নীতি দেখুন।

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
    <Operation>RefreshAccessToken</Operation>
    <GenerateResponse enabled="true"/>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>

ফেরত

<GenerateResponse> চালু করা থাকলে, নীতিটি নতুন অ্যাক্সেস টোকেন সহ একটি JSON উত্তর প্রদান করে। refresh_token গ্র্যান্টের ধরন অ্যাক্সেস ও নতুন রিফ্রেশ টোকেন, দুটিই মিন্ট করার সুবিধা দেয়। যেমন:

{
    "issued_at": "1420301470489",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "refresh_token_issued_at": "1420301470489",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "token_type": "BearerToken",
    "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "2"
}

আপনাকে জানতে হবে যে নতুন রিফ্রেশ টোকেন তৈরি করার পরে, আসল টোকেনটি আর বৈধ থাকে না।

<GenerateResponse>-এর মান true হিসেবে সেট করা থাকলে, উপরে দেখানো উত্তরটি আপনি পাবেন। <GenerateResponse> false হিসেবে সেট করা থাকলে, নীতি কোনও উত্তর রিটার্ন করে না। পরিবর্তে, এটি অ্যাক্সেস টোকেন গ্র্যান্টের সাথে সম্পর্কিত ডেটা সহ নিম্নলিখিত কনটেক্সট (ফ্লো) ভেরিয়েবলের সেট পূরণ করে।

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

যেমন:

oauthv2accesstoken.RefreshAccessToken.access_token
oauthv2accesstoken.RefreshAccessToken.expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token
oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at
oauthv2accesstoken.RefreshAccessToken.refresh_token_status

এনকোডিং সাধারণ যাচাইকরণ সংক্রান্ত ক্রেডেনশিয়াল

টোকেন বা অথরাইজেশন কোডের অনুরোধ করার জন্য API কল করলে, client_id ও client_secret ভ্যালুগুলিকে HTTP-Basic Authentication হেডার হিসেবে পাস করা একটি ভাল প্র্যাক্টিস এবং এটি OAuth 2.0 স্পেসিফিকেশনে সুপারিশ করা হয়েছে, যা IETF RFC 2617-এ বর্ণনা করা হয়েছে। এটি করতে, আপনাকে অবশ্যই দুটি ভ্যালুকে একসাথে কোলন দিয়ে আলাদা করে যোগ করার ফলাফলকে base64-এনকোড করতে হবে।

সিউডো-কোডে:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

এই উদাহরণে, ns4fQc14Zg4hKFCNaSzArVuwszX95X হল client_id এবং ZIjFyTsNgQNyxI হল ক্লায়েন্ট সিক্রেট।

Base64-এনকোড করা ভ্যালু গণনা করার জন্য আপনি যে প্রোগ্রামিং ভাষা ব্যবহার করুন না কেন, সেইসব প্রদত্ত ক্লায়েন্ট ক্রেডেনশিয়ালের জন্য, Base64-এনকোড করা ফলাফল হল: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

তারপরে, আপনি নিম্নলিখিতভাবে টোকেনের অনুরোধ করতে পারবেন:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

আপনি -u বিকল্প ব্যবহার করলে, curl ইউটিলিটি আপনার জন্য HTTP Basic হেডার তৈরি করবে। নিচে যা লেখা আছে তা উপরেরটির সমার্থক:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

অন্যান্য প্রোগ্রামিং এনভায়রনমেন্টে একই ধরনের শর্টকাট থাকতে পারে যা base64-এনকোডেড হেডার অটোমেটিক জেনারেট করে।

ডেটাবেসে টোকেন হ্যাশ করা

ডেটাবেস নিরাপত্তা লঙ্ঘনের ঘটনা ঘটলে OAuth অ্যাক্সেস ও রিফ্রেশ টোকেন সুরক্ষিত রাখতে, আপনি Edge অর্গানাইজেশনে অটোমেটিক টোকেন হ্যাশিং চালু করতে পারেন। ফিচারটি চালু করা থাকলে, Edge আপনার নির্দিষ্ট করা অ্যালগরিদম ব্যবহার করে নতুন তৈরি হওয়া OAuth অ্যাক্সেস ও রিফ্রেশ টোকেনের হ্যাশ করা ভার্সন অটোমেটিক তৈরি করে। (আগে থেকে থাকা টোকেন বাল্ক-হ্যাশিং করা সংক্রান্ত তথ্য নিচে দেওয়া হল।) API কলে আন-হ্যাশ করা টোকেন ব্যবহার করা হয় এবং Edge সেগুলিকে ডেটাবেসে হ্যাশ করা ভার্সনের সাথে মিলিয়ে যাচাই করে।

নিম্নলিখিত সংস্থা-লেভেল প্রপার্টি OAuth টোকেন হ্যাশিং কন্ট্রোল করে।

features.isOAuthTokenHashingEnabled = true
features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

আপনার কাছে আগে থেকে হ্যাশ করা টোকেন থাকলে এবং সেগুলি মেয়াদ শেষ না হওয়া পর্যন্ত রেখে দিতে চাইলে, আপনার প্রতিষ্ঠানে নিম্নলিখিত প্রপার্টি সেট করুন, যেখানে হ্যাশিং অ্যালগরিদম আগে থেকে থাকা অ্যালগরিদমের সাথে ম্যাচ করে (যেমন, SHA1, আগের Edge ডিফল্ট)। টোকেন আন-হ্যাশ করা থাকলে, PLAIN ব্যবহার করুন।

features.isOAuthTokenFallbackHashingEnabled = true
features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

আপনি Edge ক্লাউড গ্রাহক হলে, আপনার প্রতিষ্ঠানে এইসব প্রপার্টি সেট করতে এবং আগে থেকে থাকা টোকেন ঐচ্ছিকভাবে বাল্ক হ্যাশ করতে, Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন।

সম্পর্কিত বিষয়