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

W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślny Obecność
name

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; element

Używaj oprócz atrybutu name do oznaczania zasady w edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślny

Nie dotyczy

Jeśli pominiesz ten element, atrybut name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

&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

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Te informacje są ważne, jeśli tworzysz reguły dotyczące błędów, aby obsługiwać błędy. Więcej informacji znajdziesz w artykułach Więcej informacji o błędach związanych z naruszeniem zasadRozwiązywanie problemów.

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna Napraw
steps.basicauthentication.InvalidBasicAuthenticationSource 500 Podczas dekodowania, gdy przychodzący ciąg zakodowany w formacie Base64 nie zawiera prawidłowej wartości lub nagłówek jest nieprawidłowy (np. nie zaczyna się od „Basic”).
steps.basicauthentication.UnresolvedVariable 500 Brak zmiennych źródłowych wymaganych do dekodowania lub kodowania. Ten błąd może wystąpić tylko wtedy, gdy IgnoreUnresolvedVariables ma wartość fałsz.

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.

Nazwa błędu Występuje, gdy Napraw
UserNameRequired W przypadku operacji nazwanej musi być obecny element <User>.
PasswordRequired W przypadku operacji nazwanej musi być obecny element <Password>.
AssignToRequired W operacji nazwanej musi znajdować się element <AssignTo>.
SourceRequired W przypadku operacji nazwanej musi być obecny element <Source>.

Zmienne dotyczące błędów

Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Więcej informacji o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu, jak podano w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatni element kodu błędu. fault.name Matches "UnresolvedVariable"
BasicAuthentication.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. BasicAuthentication.BA-Authenticate.failed = true

Przykładowa odpowiedź na błąd

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

Przykładowa reguła błędu

<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