HMAC নীতি

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

একটি হ্যাশ-ভিত্তিক মেসেজ যাচাইকরণ কোড (HMAC) গণনা ও যাচাই করে। কখনও কখনও 'কীড মেসেজ যাচাইকারী কোড' বা 'কীড হ্যাশ' নামে পরিচিত, HMAC একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন ব্যবহার করে, যেমন SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 বা MD-5, যা একটি "মেসেজে" প্রয়োগ করা হয়, সাথে একটি গোপন কী, যাতে সেই মেসেজে একটি সিগনেচার বা মেসেজ যাচাইকারী কোড তৈরি করা যায়। এখানে "মেসেজ" বলতে বাইট স্ট্রিমকে বোঝানো হয়েছে। মেসেজ প্রেরকও প্রাপককে HMAC পাঠাতে পারে, এবং প্রাপক মেসেজ যাচাই করার জন্য HMAC ব্যবহার করতে পারে।

HMAC সম্পর্কে আরও জানতে, মেসেজ যাচাইকরণের জন্য HMAC: কী-ভিত্তিক হ্যাশিং (rfc2104) দেখুন।

নমুনা

HMAC তৈরি করা

<HMAC name='HMAC-1'>

  <Algorithm>SHA256</Algorithm>

  <SecretKey ref='private.secretkey'/>

  <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional -->

  <!--
    The "message" can include fixed and multiple variable parts,
    including newlines and static functions.
    Whitespace is significant.
   -->
  <Message>Fixed Part
    {a_variable}
    {timeFormatUTCMs(timeFormatString1,system.timestamp)}
    {nonce}
  </Message>

  <!-- default encoding is base64 -->
  <Output encoding='base16'>name_of_variable</Output>

</HMAC>

HMAC যাচাই করা

<HMAC name='HMAC-1'>

  <Algorithm>SHA256</Algorithm>

  <SecretKey ref='private.secretkey'/>

  <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional -->

  <!--
    The "message" can include fixed and multiple variable parts,
    including newlines and static functions.
    Whitespace is significant.
   -->
  <Message>Fixed Part
    {a_variable}
    {timeFormatUTCMs(timeFormatString1,system.timestamp)}
    {nonce}
  </Message>

  <!--
    VerificationValue is optional.
    Include it to perform an HMAC check.
  -->
  <VerificationValue encoding='base16' ref='expected_hmac_value'/>

  <!-- default encoding is base64 -->
  <Output encoding='base16'>name_of_variable</Output>

</HMAC>

সিগনেচার গণনা করা এবং সেই সিগনেচার যাচাই করার জন্য ঠিক একই প্রসেস অনুসরণ করা হয়। HMAC নীতি একটি HMAC গণনা করে এবং ঐচ্ছিকভাবে প্রত্যাশিত মানের সাথে গণনা করা সিগনেচার যাচাই করতে পারে। ঐচ্ছিক VerificationValue এলিমেন্ট (উপস্থিত থাকলে) নীতিকে নির্দেশ দেয় যে সেটি যেন গণনা করা ভ্যালুকে পরিচিত বা প্রদত্ত ভ্যালুর সাথে মিলিয়ে দেখে।


HMAC-এর জন্য এলিমেন্ট রেফারেন্স

নীতি সংক্রান্ত রেফারেন্সে HMAC নীতির এলিমেন্ট ও অ্যাট্রিবিউট বর্ণনা করা আছে।

টপ-লেভেল এলিমেন্টে প্রযোজ্য অ্যাট্রিবিউট

<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">

সব নীতি সংক্রান্ত পেরেন্ট এলিমেন্টের ক্ষেত্রে নিম্নলিখিত অ্যাট্রিবিউট সাধারণ।

অ্যাট্রিবিউট বিবরণ ডিফল্ট উপস্থিতি
নাম নীতির ইন্টার্নাল নাম। নামে ব্যবহার করা অক্ষরগুলি এগুলির মধ্যে সীমাবদ্ধ: A-Z0-9._\-$ %. তবে, Apigee UI অতিরিক্ত বিধিনিষেধ প্রয়োগ করে, যেমন, অটোমেটিক এমন অক্ষর সরিয়ে দেয় যা আলফানিউমেরিক নয়।

বিকল্প হিসেবে, Apigee UI প্রক্সি এডিটরে অন্য, স্বাভাবিক-ভাষার নাম দিয়ে নীতি লেবেল করতে <displayname></displayname> এলিমেন্ট ব্যবহার করুন।

প্রযোজ্য নয় প্রয়োজনীয়
continueOnError নীতি কাজ না করলে সমস্যা দেখানোর জন্য false-এ সেট করা হয়। বেশিরভাগ নীতির ক্ষেত্রে এটি প্রত্যাশিত আচরণ।

true-এ সেট করা থাকলে, নীতি কাজ না করলেও ফ্লো এক্সিকিউশন চলতে থাকে।

মিথ্যা ঐচ্ছিক
সক্ষমিত নীতি প্রয়োগ করতে true হিসেবে সেট করুন।

নীতি "বন্ধ করতে" false হিসেবে সেট করুন। কোনও ফ্লোতে এটি অ্যাটাচ করা থাকলেও, নীতিটি প্রয়োগ করা হবে না ।

সত্য ঐচ্ছিক
async এই অ্যাট্রিবিউট আর কাজ করে না। মিথ্যা বন্ধ করে দেওয়া হয়েছে

<Algorithm>

<Algorithm>algorithm-name</Algorithm>

HMAC গণনা করার জন্য হ্যাশ অ্যালগরিদম নির্দিষ্ট করে।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি প্রয়োজনীয়
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 এবং MD-5

নীতি কনফিগারেশন কেস আলাদা না করেই অ্যালগরিদমের নাম গ্রহণ করে এবং অক্ষর ও সংখ্যার মধ্যে ড্যাশ সহ বা ড্যাশ ছাড়া নাম গ্রহণ করে। যেমন, SHA256 ও SHA-256 ও sha256 একই।

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

Apigee UI-এর প্রক্সি এডিটরে নীতিকে আলাদা, স্বাভাবিক-ভাষার নাম দিয়ে লেবেল করার জন্য নাম অ্যাট্রিবিউটের সাথে ব্যবহার করুন।

ডিফল্ট আপনি এই এলিমেন্ট বাদ দিলে, নীতির নাম অ্যাট্রিবিউটের ভ্যালু ব্যবহার করা হয়।
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং

<Message>

<Message>message_template_here</Message>
or
<Message ref='variable_here'/>

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

<Message>Fixed Part
    {a_variable}
    {timeFormatUTCMs(timeFormatString1,system.timestamp)}
    {nonce}
</Message>

মেসেজ টেমপ্লেটে নিউলাইন ও স্ট্যাটিক ফাংশন সহ ফিক্সড ও পরিবর্তনযোগ্য অংশ থাকতে পারে। হোয়াইটস্পেস গুরুত্বপূর্ণ।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি প্রয়োজনীয়
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু টেক্সট ভ্যালুর জন্য যেকোনও স্ট্রিং বৈধ। আপনি ref অ্যাট্রিবিউট দিলে, সেটি টেক্সট ভ্যালুর চেয়ে বেশি প্রাধান্য পাবে। নীতিটি মেসেজ টেমপ্লেট হিসেবে টেক্সট ভ্যালু বা রেফারেন্স করা ভেরিয়েবেল মূল্যায়ন করে।

<Output>

<Output encoding='encoding_name'>variable_name</Output>

কম্পিউট করা HMAC ভ্যালু সহ নীতিকে সেট করতে হবে এমন ভেরিয়েবলের নাম নির্দিষ্ট করে। এছাড়াও, আউটপুটের জন্য কোন এনকোডিং ব্যবহার করতে হবে তা নির্দিষ্ট করে।

ডিফল্ট

ডিফল্ট আউটপুট ভেরিয়েবল হল hmac.POLICYNAME.output।

encoding অ্যাট্রিবিউটের ডিফল্ট ভ্যালু হল base64।

উপস্থিতি ঐচ্ছিক। এই এলিমেন্ট না থাকলে, নীতিটি base64-এনকোড করা ভ্যালু সহ ফ্লো ভেরিয়েবল hmac.POLICYNAME.output সেট করে।
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু

এনকোডিংয়ের জন্য, hex, base16, base64, base64url.

ভ্যালুতে ছোট ও বড় হাতের অক্ষরের পার্থক্য করা হয় না; hex ও base16 হল সমার্থক শব্দ।

Output এলিমেন্টের টেক্সট ভ্যালু যেকোনও সঠিক ফ্লো ভেরিয়েবলের নাম হতে পারে।

<SecretKey>

<SecretKey encoding='encoding_name' ref='private.secretkey'/>

HMAC গণনা করার জন্য ব্যবহৃত সিক্রেট কী নির্দিষ্ট করে। নির্দিষ্ট এনকোডিং অনুযায়ী ডিকোড করা রেফারেন্সড ভেরিয়েবল থেকে কী পাওয়া যায়।

ডিফল্ট

রেফারেন্স করা ভেরিয়েবলের কোনও ডিফল্ট ভ্যালু নেই; ref অ্যাট্রিবিউট প্রয়োজন।

encoding অ্যাট্রিবিউট না থাকলে, ডিফল্ট হিসেবে নীতি UTF-8-এর মাধ্যমে গোপন কী স্ট্রিং ডিকোড করে কী বাইট পায়।

উপস্থিতি প্রয়োজনীয়
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু

encoding-এর জন্য, সঠিক মান হল hex, base16, base64, utf8. ডিফল্ট হল UTF8. ভ্যালুতে ছোট ও বড় হাতের অক্ষরের পার্থক্য করা হয় না এবং ড্যাশ গুরুত্বপূর্ণ নয়। Base16 হল base-16 এবং bAse16-এর মতো। Base16 ও Hex হল সমার্থক শব্দ।

এনকোডিং অ্যাট্রিবিউট ব্যবহার করে আপনি এমন একটি কী নির্দিষ্ট করতে পারবেন যা UTF-8 প্রিন্ট করা যায় এমন অক্ষরের রেঞ্জের বাইরের বাইট অন্তর্ভুক্ত করে। যেমন, ধরুন, নীতি কনফিগারেশনে এটি অন্তর্ভুক্ত আছে:

 <SecretKey encoding='hex' ref='private.encodedsecretkey'/>

ধরে নিন, private.encodedsecretkey স্ট্রিং 536563726574313233 ধরে রেখেছে।

এই ক্ষেত্রে, কী বাইটগুলি এইভাবে ডিকোড করা হবে: [53 65 63 72 65 74 31 32 33] (প্রতিটি বাইট হেক্সে দেখানো হয়েছে)। আরেকটি উদাহরণ হল, যদি encoding='base64', এবং private.encodedsecretkey স্ট্রিং U2VjcmV0MTIz, ধরে রাখে, তাহলে কী-এর জন্য একই বাইটের সেট তৈরি হবে। কোনও এনকোডিং অ্যাট্রিবিউট না থাকলে, অথবা UTF8 এনকোডিং অ্যাট্রিবিউট থাকলে, স্ট্রিং ভ্যালু Secret123 থেকে একই বাইটের সেট পাওয়া যাবে।

<VerificationValue>

<VerificationValue encoding='encoding_name' ref='variable_name'/>
or
<VerificationValue encoding='encoding_name'>string_value</VerificationValue>

(ঐচ্ছিক) যাচাইকরণ মান এবং যাচাইকরণ মান এনকোড করার জন্য ব্যবহৃত এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। নীতিটি ভ্যালু ডিকোড করার জন্য এই অ্যালগরিদম ব্যবহার করবে।

ডিফল্ট কোনও ডিফল্ট যাচাইকরণ ভ্যালু নেই। এলিমেন্টটি উপস্থিত থাকলেও encoding অ্যাট্রিবিউট না থাকলে, নীতিটি base64-এর ডিফল্ট এনকোডিং ব্যবহার করে
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু

এনকোডিং অ্যাট্রিবিউটের জন্য সঠিক মান হল: hex, base16, base64, base64url. ভ্যালু ছোট ও বড় হাতের অক্ষরের মধ্যে পার্থক্য করে না; hex ও base16 হল সমার্থক শব্দ।

VerificationValue-এর এনকোডিং Output এলিমেন্টের জন্য ব্যবহৃত এনকোডিংয়ের মতো হতে হবে না।

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

নীতিতে উল্লেখ করা কোনও রেফারেন্স করা ভেরিয়েবল সমাধান করা না গেলে, আপনি যদি চান যে নীতিটি একটি সমস্যা দেখাক, তাহলে false হিসেবে সেট করুন। true-এ সেট করা থাকলে, সমাধান করা যায় না এমন যেকোনও ভেরিয়েবলকে খালি স্ট্রিং (নাল) হিসেবে বিবেচনা করা হবে।

IgnoreUnresolvedVariables বুলিয়ান শুধুমাত্র সেইসব ভেরিয়েবলকে প্রভাবিত করে যেগুলি মেসেজ টেমপ্লেট দ্বারা রেফারেন্স করা হয়। SecretKey ও VerificationValue ভেরিয়েবেল রেফারেন্স করতে পারলেও, দু'টিকেই সমাধানযোগ্য হতে হবে, তাই ignore সেটিং সেগুলির ক্ষেত্রে প্রযোজ্য হয় না।

ডিফল্ট মিথ্যা
উপস্থিতি ঐচ্ছিক
টাইপ করুন বুলিয়ান
সঠিক ভ্যালু ঠিক বা ভুল

ফ্লো ভেরিয়েবল

নীতি এক্সিকিউশনের সময় এইসব ভেরিয়েবল সেট করতে পারে।

ভেরিয়েবেল বিবরণ উদাহরণ
hmac.policy_name.message নীতিটি কার্যকর মেসেজ সহ এই ভেরিয়েবল সেট করে, Message এলিমেন্টে নির্দিষ্ট করা মেসেজ টেমপ্লেটের মূল্যায়ন করা হয়। hmac.HMAC-Policy.message = "Hello, World"
hmac.policy_name.output Output এলিমেন্টে কোনও ভেরিয়েবলের নাম উল্লেখ করা না থাকলে, HMAC কম্পিউটেশনের ফলাফল পাওয়া যায়। hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4=
hmac.policy_name.outputencoding আউটপুট এনকোডিংয়ের নাম পায়। hmac.HMAC-Policy.outputencoding = base64

সমস্যার রেফারেন্স

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

রানটাইম সমস্যা

নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।

সমস্যার কোড HTTP স্ট্যাটাস এটি তখন ঘটে যখন
steps.hmac.UnresolvedVariable 401

HMAC নীতিতে উল্লেখ করা কোনও ভেরিয়েবল যদি:

  • স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়)

    অথবা

  • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা নেই)
steps.hmac.HmacVerificationFailed 401 HMAC যাচাইকরণ সম্পূর্ণ হয়নি; যাচাইকরণের জন্য দেওয়া ভ্যালু গণনা করা ভ্যালুর সাথে ম্যাচ করছে না।
steps.hmac.HmacCalculationFailed 401 নীতিটি HMAC গণনা করতে পারেনি।
steps.hmac.EmptySecretKey 401 সিক্রেট কী ভেরিয়েবলের ভ্যালু খালি।
steps.hmac.EmptyVerificationValue 401 যাচাইকরণ ভ্যালু ধারণকারী ভেরিয়েবল খালি আছে।

ডিপ্লয়মেন্ট সংক্রান্ত সমস্যা

এই নীতি থাকা কোনও প্রক্সি আপনি প্রয়োগ করলে, এই সমস্যা হতে পারে।

সমস্যার নাম HTTP স্ট্যাটাস এটি তখন ঘটে যখন
steps.hmac.MissingConfigurationElement 401 প্রয়োজনীয় এলিমেন্ট বা অ্যাট্রিবিউট না থাকলে এই সমস্যা হয়।
steps.hmac.InvalidValueForElement 401 Algorithm এলিমেন্টে উল্লেখ করা ভ্যালু যদি নিম্নলিখিত ভ্যালুগুলির মধ্যে একটি না হয়: SHA-1, SHA-224, SHA-256, SHA-512 অথবা MD-5, তাহলে এই সমস্যাটি হয়।
steps.hmac.InvalidSecretInConfig 401 SecretKey-এর জন্য স্পষ্টভাবে কোনও টেক্সট ভ্যালু দেওয়া থাকলে এই সমস্যা হয়।
steps.hmac.InvalidVariableName 401 SecretKey ভেরিয়েবলে private প্রিফিক্স (private.) না থাকলে এই সমস্যা হয়।

ফল্ট ভেরিয়েবল

রানটাইম ত্রুটি ঘটলে এই ভেরিয়েবলগুলি সেট করা হয়। আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল যেখানে উদাহরণ
fault.name=" fault_name " fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। fault.name Matches "UnresolvedVariable"
hmac. policy_name .failed নীতি ব্যর্থতার ক্ষেত্রে এই পরিবর্তনশীল সেট করে। hmac.HMAC-Policy.failed = true

উদাহরণ ত্রুটি প্রতিক্রিয়া

ত্রুটি পরিচালনার জন্য, সর্বোত্তম অনুশীলন হল ত্রুটি প্রতিক্রিয়ার errorcode অংশটি আটকে রাখা। faultstring -এ লেখার উপর নির্ভর করবেন না, কারণ এটি পরিবর্তন হতে পারে।

উদাহরণ দোষ নিয়ম

<FaultRules>
    <FaultRule name="HMAC Policy Errors">
        <Step>
            <Name>AM-Unauthorized</Name>
            <Condition>(fault.name Matches "HmacVerificationFailed")</Condition>
        </Step>
        <Condition>hmac.HMAC-1.failed = true</Condition>
    </FaultRule>
</FaultRules>