HMAC politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Karma tabanlı mesaj doğrulama kodu (HMAC) hesaplar ve doğrular. Bazen Anahtarlı Mesaj Kimlik Doğrulama Kodu veya Anahtarlı Karma olarak da bilinen HMAC, bir "mesaja" uygulanan SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 veya MD-5 gibi bir şifreleme karma işlevini gizli bir anahtarla birlikte kullanarak bu mesajda bir imza veya mesaj kimlik doğrulama kodu oluşturur. Buradaki "mesaj" terimi, herhangi bir bayt akışını ifade eder. Bir iletinin göndereni, alıcıya HMAC da gönderebilir ve alıcı, iletiyi doğrulamak için HMAC'yi kullanabilir.

HMAC hakkında daha fazla bilgi edinmek için HMAC: Keyed-Hashing for Message Authentication (rfc2104) başlıklı makaleyi inceleyin.

Örnekler

HMAC oluşturma

<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'yi doğrulama

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

İmza hesaplama ve imza doğrulama işlemleri tam olarak aynı süreci izler. HMAC politikası bir HMAC hesaplar ve isteğe bağlı olarak hesaplanan imzayı beklenen bir değere göre doğrulayabilir. İsteğe bağlı VerificationValue öğesi (varsa) politikayı, hesaplanan değeri bilinen veya verilen bir değere karşı kontrol etmeye yönlendirir.


HMAC için öğe referansı

Politika referansında, HMAC politikasının öğeleri ve özellikleri açıklanır.

En üst düzey öğeye uygulanan özellikler

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

Aşağıdaki özellikler tüm politika üst öğeleri için ortaktır.

Özellik Açıklama Varsayılan Varlık (Presence)
ad Politikanın dahili adı. Adda kullanabileceğiniz karakterler şunlarla sınırlıdır: A-Z0-9._\-$ %. Ancak Apigee kullanıcı arayüzü, alfanümerik olmayan karakterleri otomatik olarak kaldırma gibi ek kısıtlamalar uygular.

İsteğe bağlı olarak, <displayname></displayname> öğesini kullanarak politikayı Apigee kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketleyin.

Yok Zorunlu
continueOnError Bir politika başarısız olduğunda hata döndürmek için false olarak ayarlayın. Bu, çoğu politika için beklenen bir davranıştır.

Bir politika başarısız olsa bile akış yürütme işleminin devam etmesi için true olarak ayarlayın.

yanlış İsteğe bağlı
etkin Politikayı zorunlu kılmak için true olarak ayarlayın.

Politikayı "kapatmak" için false olarak ayarlayın. Politika, akışa ekli kalsa bile zorunlu kılınmaz.

doğru İsteğe bağlı
eş zamansız Bu özelliğin desteği sonlandırıldı. yanlış Kullanımdan kaldırıldı

<Algorithm>

<Algorithm>algorithm-name</Algorithm>

HMAC'yi hesaplamak için karma algoritmasını belirtir.

Varsayılan Yok
Varlık (Presence) Zorunlu
Tür Dize
Geçerli değerler SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 ve MD-5

Politika yapılandırması, büyük/küçük harf ayrımı yapmadan ve harfler ile sayılar arasında tire işaretiyle ya da tire işareti olmadan algoritma adlarını kabul eder . Örneğin, SHA256, SHA-256 ve sha256 eşdeğerdir.

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

Apigee kullanıcı arayüzü proxy düzenleyicisinde politikayı farklı ve doğal dilde bir adla etiketlemek için ad özelliğiyle birlikte kullanılır.

Varsayılan Bu öğeyi atlarsanız politikanın ad özelliği değeri kullanılır.
Varlık (Presence) İsteğe bağlı
Tür Dize

<Message>

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

İmzalanacak ileti yükünü belirtir. Bu öğenin girişi, çalışma zamanında ek öğelerin (ör. zaman damgaları, tek kullanımlık sayılar, üstbilgi listeleri veya diğer bilgiler) dahil edilmesine olanak tanımak için ileti şablonlarını (değişken değiştirme) destekler. Örneğin:

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

İleti şablonu, yeni satırlar ve statik işlevler de dahil olmak üzere sabit ve değişken bölümler içerebilir. Boşluk önemlidir.

Varsayılan Yok
Varlık (Presence) Zorunlu
Tür Dize
Geçerli değerler Metin değeri için herhangi bir dize geçerlidir. ref özelliği sağlarsanız bu özellik, metin değerine göre öncelikli olur. Politika, metin değerini veya referans verilen değişkeni ileti şablonu olarak değerlendirir.

<Output>

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

Politikanın hesaplanan HMAC değeriyle ayarlaması gereken değişkenin adını belirtir. Ayrıca çıktı için kullanılacak kodlamayı da belirtir.

Varsayılan

Varsayılan çıkış değişkeni hmac.POLICYNAME.output'dır.

encoding özelliğinin varsayılan değeri base64'dir.

Varlık (Presence) İsteğe bağlı. Bu öğe mevcut değilse politika, akış değişkenini hmac.POLICYNAME.output olarak ayarlar ve base64 kodlu bir değer kullanır.
Tür Dize
Geçerli değerler

Kodlama için hex, base16, base64, base64url.

Değerler büyük/küçük harfe duyarlı değildir. hex ve base16 eş anlamlıdır.

Output öğesinin metin değeri, geçerli herhangi bir akış değişkeni adı olabilir.

<SecretKey>

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

HMAC'yi hesaplamak için kullanılan gizli anahtarı belirtir. Anahtar, referans verilen değişkenden alınır ve belirli kodlamaya göre çözülür.

Varsayılan

Referans verilen değişken için varsayılan değer yok; ref özelliği zorunludur.

encoding özelliği yoksa politika, anahtar baytlarını elde etmek için gizli anahtar dizesinin kodunu varsayılan olarak UTF-8 ile çözer.

Varlık (Presence) Zorunlu
Tür Dize
Geçerli değerler

encoding için geçerli değerler hex, base16, base64, utf8'dir. Varsayılan değer UTF8'dir. Değerler büyük/küçük harfe duyarlı değildir ve tireler önemsizdir. Base16, base-16 ve bAse16 ile aynıdır. Base16 ve Hex eş anlamlıdır.

Kodlama özelliği, UTF-8 yazdırılabilir karakter aralığı dışındaki baytları içeren bir anahtar belirtmenize olanak tanır. Örneğin, politika yapılandırmasının şunları içerdiğini varsayalım:

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

private.encodedsecretkey'nın 536563726574313233 dizesini içerdiğini varsayalım.

Bu durumda, anahtar baytları şu şekilde çözülür: [53 65 63 72 65 74 31 32 33] (her bayt onaltılık olarak gösterilir). Başka bir örnek olarak, encoding='base64' ve private.encodedsecretkey dizesi U2VjcmV0MTIz'yi içeriyorsa anahtar için aynı bayt kümesi elde edilir. Kodlama özelliği yoksa veya UTF8 kodlama özelliği varsa Secret123 dize değeri aynı bayt kümesiyle sonuçlanır.

<VerificationValue>

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

(İsteğe bağlı) Doğrulama değerinin yanı sıra doğrulama değerini kodlamak için kullanılan kodlama algoritmasını belirtir. Politika, değeri kod çözmek için bu algoritmayı kullanır.

Varsayılan Varsayılan doğrulama değeri yoktur. Öğe mevcutsa ancak encoding özelliği yoksa politika, base64 varsayılan kodlamasını kullanır.
Varlık (Presence) İsteğe bağlı
Tür Dize
Geçerli değerler

Kodlama özelliği için geçerli değerler şunlardır: hex, base16, base64, base64url. Değerler büyük/küçük harfe duyarlı değildir. hex ve base16 eş anlamlıdır.

VerificationValue öğesinin kodlaması, Output öğesi için kullanılan kodlamayla aynı olmak zorunda değildir.

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Politikada belirtilen referans verilen değişkenlerden herhangi biri çözümlenemediğinde politikanın hata vermesini istiyorsanız false olarak ayarlayın. Çözülemeyen değişkenleri boş dize (null) olarak değerlendirmek için true değerine ayarlayın.

IgnoreUnresolvedVariables boole'u yalnızca mesaj şablonu tarafından referans verilen değişkenleri etkiler. SecretKey ve VerificationValue bir değişkene referans verebilir ancak her ikisinin de çözümlenebilir olması gerekir. Bu nedenle, ignore ayarı bunlar için geçerli değildir.

Varsayılan Yanlış
Varlık (Presence) İsteğe bağlı
Tür Boole
Geçerli değerler doğru veya yanlış

Akış değişkenleri

Politika, yürütme sırasında bu değişkenleri ayarlayabilir.

Değişken Açıklama Örnek
hmac.policy_name.message Politika, bu değişkeni etkili mesajla ayarlar. Bu, Message öğesinde belirtilen mesaj şablonunun değerlendirilmesinin sonucudur. hmac.HMAC-Policy.message = "Hello, World"
hmac.policy_name.output Output öğesi bir değişken adı belirtmediğinde HMAC hesaplamasının sonucunu alır. hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4=
hmac.policy_name.outputencoding Çıkış kodlamasının adını alır. hmac.HMAC-Policy.outputencoding = base64

Hata referansı

Bu bölümde, bu politika bir hata tetiklediğinde gönderilen hata kodları ve hata mesajları ile Apigee tarafından ayarlanan hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Politika yürütüldüğünde bu hatalar ortaya çıkabilir.

Hata kodu HTTP durumu Gerçekleşme zamanı:
steps.hmac.UnresolvedVariable 401

Bu hata, HMAC politikasında belirtilen bir değişken aşağıdakilerden biriyse ortaya çıkar:

  • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz)

    veya

  • Çözümlenemiyor (tanımlanmadı)
steps.hmac.HmacVerificationFailed 401 HMAC doğrulaması başarısız oldu. Sağlanan doğrulama değeri, hesaplanan değerle eşleşmiyor.
steps.hmac.HmacCalculationFailed 401 Politika HMAC hesaplanamadı.
steps.hmac.EmptySecretKey 401 Gizli anahtar değişkeninin değeri boş.
steps.hmac.EmptyVerificationValue 401 Doğrulama değerini tutan değişken boş.

Dağıtım hataları

Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.

Hata adı HTTP durumu Gerçekleşme zamanı:
steps.hmac.MissingConfigurationElement 401 Bu hata, gerekli bir öğe veya özellik eksik olduğunda ortaya çıkar.
steps.hmac.InvalidValueForElement 401 Bu hata, Algoritma öğesinde belirtilen değer şu değerlerden biri değilse ortaya çıkar: SHA-1, SHA-224, SHA-256, SHA-512 veya MD-5.
steps.hmac.InvalidSecretInConfig 401 Bu hata, SecretKey için açıkça sağlanan bir metin değeri varsa ortaya çıkar.
steps.hmac.InvalidVariableName 401 Bu hata, SecretKey değişkeni private önekini (private.) içermiyorsa ortaya çıkar.

Hata değişkenleri

Bu değişkenler, çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, hatanın şurada belirtildiği gibi adıdır: Yukarıdaki Çalışma zamanı hataları tablosu. Hata adı en son hata kodunun bir bölümüdür. fault.name Matches "UnresolvedVariable"
hmac.policy_name.failed Politika, hata durumunda bu değişkeni ayarlar. hmac.HMAC-Policy.failed = true

Örnek hata yanıtı

Hata giderme için en iyi uygulama, hatanın errorcode kısmını yakalamaktır tıklayın. Değişebileceği için faultstring içindeki metne güvenmeyin.

Örnek hata kuralı

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