এইচএমএসি নীতি

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

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

HMAC সম্পর্কে আরও জানতে, HMAC: Keyed-Hashing for Message Authentication (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 সেট করুন। কোনো ফ্লো-এর সাথে সংযুক্ত থাকলেও পলিসিটি কার্যকর হবে না।

সত্য ঐচ্ছিক
অ্যাসিঙ্ক এই অ্যাট্রিবিউটটি অপ্রচলিত। মিথ্যা অপ্রচলিত

<অ্যালগরিদম>

<Algorithm>algorithm-name</Algorithm>

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

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

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

<ডিসপ্লে নাম>

<DisplayName>Policy Display Name</DisplayName>

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

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

বার্তা

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

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

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

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

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

আউটপুট

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

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

ডিফল্ট

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

encoding অ্যাট্রিবিউটের ডিফল্ট মান হলো base64

উপস্থিতি ঐচ্ছিক। এই উপাদানটি উপস্থিত না থাকলে, পলিসিটি hmac.POLICYNAME.output ফ্লো ভেরিয়েবলটিকে একটি বেস৬৪-এনকোডেড মান দিয়ে সেট করে।
প্রকার স্ট্রিং
বৈধ মান

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

মানগুলো কেস-ইনসেনসিটিভ; hex এবং base16 সমার্থক শব্দ।

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

<গোপন চাবি>

<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 encoding='encoding_name' ref='variable_name'/>
or
<VerificationValue encoding='encoding_name'>string_value</VerificationValue>

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

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

encoding অ্যাট্রিবিউটের জন্য বৈধ মানগুলি হলো: hex , base16 , base64 , base64url । মানগুলি কেস-ইনসেনসিটিভ; hex এবং base16 সমার্থক শব্দ।

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

<অমীমাংসিত ভেরিয়েবল উপেক্ষা করুন>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

যদি আপনি চান যে পলিসিতে উল্লেখিত কোনো রেফারেন্সকৃত ভেরিয়েবল সমাধানযোগ্য না হলে পলিসিটি একটি ত্রুটি (error) দেখাবে, তাহলে এটিকে false সেট করুন। যেকোনো সমাধানযোগ্য নয় এমন ভেরিয়েবলকে একটি খালি স্ট্রিং (null) হিসেবে গণ্য করতে এটিকে 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 এই ত্রুটিটি ঘটে যদি অ্যালগরিদম উপাদানে উল্লিখিত মান নিম্নলিখিত মানগুলির মধ্যে একটি না হয়: 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>