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

আপনি 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 গণনা করে, এবং ঐচ্ছিকভাবে একটি প্রত্যাশিত মানের বিপরীতে গণনাকৃত স্বাক্ষর যাচাই করতে পারে। ঐচ্ছিক ভেরিফিকেশন ভ্যালু এলিমেন্ট (যদি উপস্থিত থাকে) একটি পরিচিত বা প্রদত্ত মানের বিপরীতে গণনা করা মান পরীক্ষা করার জন্য নীতিকে নির্দেশ করে।


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

পলিসি রেফারেন্স HMAC নীতির উপাদান এবং গুণাবলী বর্ণনা করে।

উচ্চ-স্তরের উপাদানে প্রযোজ্য বৈশিষ্ট্য

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

নিম্নলিখিত বৈশিষ্ট্যগুলি সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ৷

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

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

N/A প্রয়োজন
continueOnError একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

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

নীতি "বন্ধ" করতে false সেট করুন৷ নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
অ্যাসিঙ্ক এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ মিথ্যা অবচয়

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

<Algorithm>algorithm-name</Algorithm>

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

ডিফল্ট N/A
উপস্থিতি প্রয়োজন
টাইপ স্ট্রিং
বৈধ মান 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_template_here</Message>
or
<Message ref='variable_here'/>

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

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

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

ডিফল্ট N/A
উপস্থিতি প্রয়োজন
টাইপ স্ট্রিং
বৈধ মান যেকোনো স্ট্রিং টেক্সট মানের জন্য বৈধ। আপনি যদি একটি ref অ্যাট্রিবিউট প্রদান করেন তবে এটি পাঠ্য মানের চেয়ে অগ্রাধিকার পাবে। নীতিটি হয় পাঠ্য মান বা একটি বার্তা টেমপ্লেট হিসাবে উল্লেখিত পরিবর্তনশীলকে মূল্যায়ন করে।

<আউটপুট>

<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 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 এর একটি ডিফল্ট এনকোডিং ব্যবহার করে
উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং
বৈধ মান

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

VerificationValue ভ্যালুর এনকোডিং Output উপাদানের জন্য ব্যবহৃত এনকোডিংয়ের মতো হওয়া উচিত নয়।

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

<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 HMAC গণনার ফলাফল পায়, যখন Output উপাদান একটি পরিবর্তনশীল নাম নির্দিষ্ট করে না। hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4=
hmac. policy_name .outputencoding আউটপুট এনকোডিং এর নাম পায়। hmac.HMAC-Policy.outputencoding = base64

Error reference

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Occurs when
steps.hmac.UnresolvedVariable 401

This error occurs if a variable specified in the HMAC policy is either:

  • Out of scope (not available in the specific flow where the policy is being executed)

    or

  • Can't be resolved (is not defined)
steps.hmac.HmacVerificationFailed 401 The HMAC verification failed; the verification value provided does not match the calculated value.
steps.hmac.HmacCalculationFailed 401 The policy was unable to calculate the HMAC.
steps.hmac.EmptySecretKey 401 The value of the secret key variable is empty.
steps.hmac.EmptyVerificationValue 401 The variable holding the verification value is empty.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name HTTP status Occurs when
steps.hmac.MissingConfigurationElement 401 This error occurs when a required element or attribute is missing.
steps.hmac.InvalidValueForElement 401 This error occurs if the value specified in the Algorithm element is not one of the following values: SHA-1, SHA-224, SHA-256, SHA-512, or MD-5.
steps.hmac.InvalidSecretInConfig 401 This error occurs if there is a text value explicitly provided for SecretKey.
steps.hmac.InvalidVariableName 401 This error occurs if the SecretKey variable does not contain the private prefix (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>