Podstawowe zasady uwierzytelniania

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Umożliwia korzystanie z prostego uwierzytelniania podstawowego w bezpieczeństwa na ostatnim etapie. Zasada pobiera nazwę użytkownika i hasło, koduje je w Base64 i zapisuje wynikową wartość do zmiennej. Wynikowa wartość ma postać Basic Base64EncodedString. Wartość ta jest zazwyczaj zapisywana w nagłówku HTTP, jak nagłówka Authorization

Ta zasada umożliwia też dekodowanie danych logowania przechowywanych w ciągu zakodowanym w standardzie Base64 jako nazwy użytkownika i hasło.

Film: ten film pokazuje, jak zakodować nazwę użytkownika za pomocą base64. przy użyciu zasad uwierzytelniania podstawowego.

Film: w tym filmie pokazujemy, jak zdekodować nazwę użytkownika zakodowaną w standardzie base64. przy użyciu zasad uwierzytelniania podstawowego.

Przykłady

Kodowanie wychodzące

<BasicAuthentication name="ApplyBasicAuthHeader">
   <DisplayName>ApplyBasicAuthHeader</DisplayName>
   <Operation>Encode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="BasicAuth.credentials.username" />
   <Password ref="BasicAuth.credentials.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
</BasicAuthentication>

W przykładowej konfiguracji zasad powyżej nazwa użytkownika i hasło do kodowania to wyodrębnionych ze zmiennych określonych przez atrybuty ref w Elementy <User> i <Password>. Zmienne muszą być: ustawianą przed wykonaniem tej zasady. Zwykle zmienne są zapełniane wartościami z mapy klucz-wartość. Zobacz mapę par klucz-wartość Zasady dotyczące operacji.

W wyniku tej konfiguracji powstaje nagłówek HTTP o nazwie Authorization – zgodnie z definicją w parametrze &lt;AssignTo&gt;, dodawane do wiadomości żądania wychodzącego wysyłanego do serwera backendu:

Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk

Wartości <User> i <Password> są połączone z dwukropkiem przed kodowaniem Base64.

Załóżmy, że masz mapę klucz-wartość z następującym wpisem:

{
  "encrypted" : true,
  "entry" : [ {
    "name" : "username",
    "value" : "MyUsername"
  }, {
    "name" : "password",
    "value" : "MyPassword"
  } ],
  "name" : "BasicAuthCredentials"
}
      

Dołącz następujące zasady KeyValueMapOperations przed zasadą uwierzytelniania Basic aby wyodrębnić wartości dla <User> i <Password> elementów z magazynu klucz-wartość i wypełnij je w zmiennych credentials.username i credentials.password.

<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials">
  <Scope>apiproxy</Scope>
  <Get assignTo="credentials.username" index='1'>
    <Key>
      <Parameter>username</Parameter>
    </Key>
  </Get>
  <Get assignTo="credentials.password" index='1'>
    <Key>
      <Parameter>password</Parameter>
    </Key>
  </Get>
</KeyValueMapOperations>
      

Dekodowanie przychodzące

<BasicAuthentication name="DecodeBaseAuthHeaders">
   <DisplayName>Decode Basic Authentication Header</DisplayName>
   <Operation>Decode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="request.header.username" />
   <Password ref="request.header.password" />
   <Source>request.header.Authorization</Source>
</BasicAuthentication>

W tej przykładowej zasadzie dekoduje ona nazwę użytkownika i hasło ze Nagłówek HTTP Authorization określony przez element &lt;Source&gt;. Base64 zakodowany ciąg musi mieć format Basic Base64EncodedString.

Zasada zapisuje zdekodowaną nazwę użytkownika w zmiennej request.header.username i zdekodowane hasło do zmiennej request.header.password.


Informacje o zasadach uwierzytelniania podstawowego

Zasada może działać w 2 trybach:

  • Kodowanie: Base64 koduje nazwę użytkownika i hasło zapisane w zmienne
  • Dekoduj: dekoduje nazwę użytkownika i hasło z Ciąg znaków zakodowany w standardzie Base64

Nazwa użytkownika i hasło są zwykle przechowywane w magazynie par klucz-wartość i są odczytywane z wartości w magazynie pary klucz-wartość w czasie działania. Szczegółowe informacje na temat korzystania z magazynu par klucz-wartość znajdziesz w artykule Operacje na mapie klucz-wartość .

Odwołanie do elementu

Dokumentacja elementu opisuje elementy i atrybuty uwierzytelniania BasicAuthentication .

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
   <DisplayName>Basic Authentication 1</DisplayName>
   <Operation>Encode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="request.queryparam.username" />
   <Password ref="request.queryparam.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
   <Source>request.header.Authorization</Source> 
</BasicAuthentication>

&lt;BasicAuthentication&gt; atrybuty

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

&lt;Operation&gt; element

Określa, czy zasada Base64 koduje czy dekoduje dane logowania.

<Operation>Encode</Operation>
Domyślne: Nie dotyczy
Obecność: Wymagane
Typ:

Ciąg tekstowy.

Prawidłowe wartości to m.in.:

  • Kodowanie
  • Decode

&lt;IgnoreUnresolvedVariables&gt; element

Gdy ustawisz wartość true, zasada nie zwróci błędu, jeśli zmiennej nie można . Gdy to ustawienie jest używane w kontekście zasady uwierzytelniania podstawowego, to ustawienie jest zwykle ustawiane do false, ponieważ zwykle warto zgłosić błąd w przypadku nazwy użytkownika lub nie można znaleźć hasła w podanych zmiennych.

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Domyślne: prawda
Obecność: Opcjonalnie
Typ:

Wartość logiczna

&lt;User&gt; element

  • Do kodowania użyj elementu <User>, aby określić zmienną zawierający nazwę użytkownika. Wartości nazwy użytkownika i hasła są połączone dwukropkiem przed Kodowanie Base64.
  • Na potrzeby dekodowania określ zmienną, w której jest zapisywana zdekodowana nazwa użytkownika.
<User ref="request.queryparam.username" /> 
Domyślne: Nie dotyczy
Obecność: Wymagane
Typ:

Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność
odsyłacz

Zmienna, z której zasada dynamicznie odczytuje nazwę użytkownika (koduje ją) lub zapisuje nazwę użytkownika (dekodowanie).

Nie dotyczy Wymagane

&lt;Password&gt; element

  • Do kodowania użyj elementu <Password>, aby określić zmienną zawierający hasło.
  • Na potrzeby dekodowania określ zmienną, w której jest zapisywane zdekodowane hasło.
<Password ref="request.queryparam.password" />
Domyślne: Nie dotyczy
Obecność: Wymagane
Typ:

Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność
odsyłacz

Zmienna, z której zasada dynamicznie odczytuje hasło (zakodowuje) lub zapisuje hasła (dekodowanie).

Nie dotyczy Wymagane

&lt;AssignTo&gt; element

Określa zmienną docelową do ustawienia zakodowaną lub zdekodowaną wartością wygenerowaną przez ten .

Poniższy przykład wskazuje, że zasada powinna ustawiać Authorization nagłówka wiadomości do wygenerowanej wartości:

<AssignTo createNew="false">request.header.Authorization</AssignTo>
Domyślne: Nie dotyczy
Obecność: Wymagane
Typ:

Ciąg znaków

Atrybuty

Atrybut Opis Domyślny Obecność
createNew Określa, czy zasada powinna zastąpić zmienną, jeśli zmienna jest już ustawiony.

W przypadku wartości „false” przypisanie do zmiennej ma miejsce tylko wtedy, gdy zmienna obecnie nieskonfigurowane (null).

Jeśli wartość to „true”, przypisanie do zmiennej jest zawsze wykonywane.

Zwykle ustawiasz ten atrybut na wartość „false” (domyślnie).

fałsz Opcjonalnie

&lt;Source&gt; element

Do dekodowania zmienna zawierająca ciąg zakodowany algorytmem Base64 w elemencie formularz Basic Base64EncodedString. Przykład: wpisz request.header.Authorization, co odpowiada nagłówkowi Authorization.

<Source>request.header.Authorization</Source>
Domyślne: Nie dotyczy
Obecność: Wymagane do dekodowania.
Typ:

Nie dotyczy

Zmienne przepływu

W przypadku niepowodzenia zasady jest ustawiana ta zmienna przepływu:

  • BasicAuthentication.{policy_name}.failed (z wartością true)
.

Informacje o błędzie

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle errors. 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 Cause Fix
steps.basicauthentication.InvalidBasicAuthenticationSource 500 On a decode when the incoming Base64 encoded string does not contain a valid value or the header is malformed (e.g., does not start with "Basic").
steps.basicauthentication.UnresolvedVariable 500 The required source variables for the decode or encode are not present. This error can only occur if IgnoreUnresolvedVariables is false.

Deployment errors

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

Error name Occurs when Fix
UserNameRequired The <User> element must be present for the named operation.
PasswordRequired The <Password> element must be present for the named operation.
AssignToRequired The <AssignTo> element must be present for the named operation.
SourceRequired The <Source> element must be present for the named operation.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "UnresolvedVariable"
BasicAuthentication.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. BasicAuthentication.BA-Authenticate.failed = true

Example error response

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.basicauthentication.UnresolvedVariable"
      },
      "faultstring":"Unresolved variable : request.queryparam.password"
   }
}

Example fault rule

<FaultRule name="Basic Authentication Faults">
    <Step>
        <Name>AM-UnresolvedVariable</Name>
        <Condition>(fault.name Matches "UnresolvedVariable") </Condition>
    </Step>
    <Step>
        <Name>AM-AuthFailedResponse</Name>
        <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition>
    </Step>
    <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition>
</FaultRule>

Schematy

Powiązane artykuły

Mapa par klucz-wartość Zasada operacji