Podstawowe zasady uwierzytelniania

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Umożliwia użycie lekkiego uwierzytelniania podstawowego, które zapewnia najwyższy poziom bezpieczeństwa. Zasada pobiera nazwę użytkownika i hasło, koduje je w standardzie Base64 i zapisuje wynikową wartość w zmiennej. Wynikowa wartość ma postać Basic Base64EncodedString. Tę wartość zwykle zapisuje się w nagłówku HTTP, np. w nagłówku Authorization.

Zasada umożliwia też dekodowanie danych logowania przechowywanych w ciągu zakodowanym w standardzie Base64 na nazwę użytkownika i hasło.

Film: ten film pokazuje, jak zakodować nazwę użytkownika i hasło w base64 przy użyciu zasady uwierzytelniania podstawowego.

Film: ten film pokazuje, jak zdekodować nazwę użytkownika i hasło zakodowane w base64 przy użyciu zasady uwierzytelniania podstawowego.

Sample

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 zasady powyżej zakodowana nazwa użytkownika i hasło pochodzą ze zmiennych określonych przez atrybuty ref w elementach <User> i <Password>. Zmienne należy ustawić przed uruchomieniem tej zasady. Zwykle zmienne są wypełniane wartościami odczytywanymi z mapy klucz-wartość. Zapoznaj się z zasadami dotyczącymi operacji mapowania par klucz-wartość.

Ta konfiguracja powoduje, że nagłówek HTTP o nazwie Authorization (określony przez element <AssignTo>) zostanie dodany do wychodzącej wiadomości żądania wysłanej do serwera backendu:

Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk

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

Załóżmy, że masz mapę klucz-wartość z takim wpisem:

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

Załącz poniższe zasady KeyValueMapOperations przed zasadą BasicUwierzytelnianie, aby móc wyodrębniać wartości elementów <User> i <Password> z magazynu klucz-wartość oraz wypełniać 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 tym przykładzie zasad zasada dekoduje nazwę użytkownika i hasło z nagłówka HTTP Authorization, zgodnie z elementem <Source>. Ciąg zakodowany w standardzie Base64 musi mieć format Basic Base64EncodedString.

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


Informacje o zasadach uwierzytelniania podstawowego

Zasada ma 2 tryby działania:

  • Kodowanie: Base64 koduje nazwę użytkownika i hasło przechowywane w zmiennych
  • Dekoduj: dekoduje nazwę użytkownika i hasło z ciągu zakodowanego w standardzie Base64.

Nazwa użytkownika i hasło są zwykle przechowywane w magazynie par klucz-wartość, a następnie odczytywane z magazynu w czasie działania. Więcej informacji o używaniu magazynu klucz-wartość znajdziesz w zasadach operacji mapowania par klucz-wartość.

Odwołanie do elementu

Dokumentacja elementów opisuje elementy i atrybuty zasady uwierzytelniania podstawowego.

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

Atrybuty <podstawowe uwierzytelnianie>

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

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Operation>

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

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

Ciąg tekstowy.

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

  • Kodowanie
  • Decode

Element <IgnorujNierozpoznane zmienne>

Gdy ma wartość true, zasada nie zgłasza błędu, jeśli nie można znaleźć zmiennej. Jeśli to ustawienie jest używane w kontekście zasady uwierzytelniania podstawowego, to ustawienie ma zwykle wartość false, ponieważ zalecane jest zgłoszenie błędu, gdy w podanych zmiennych nie można znaleźć nazwy użytkownika lub hasła.

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

Wartość logiczna

Element <User>

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

Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność
referencja

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

Nie dotyczy Wymagane

Element <Password>

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

Nie dotyczy

Atrybuty

Atrybut Opis Domyślne Obecność
referencja

Zmienna, z której zasada dynamicznie odczytuje hasło (zakoduje) lub zapisuje hasło (dekoduje).

Nie dotyczy Wymagane

Element <AssignTo>

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

Ten przykład wskazuje, że zasada powinna ustawić wygenerowaną wartość w nagłówku Authorization wiadomości:

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

Ciąg znaków

Atrybuty

Atrybut Opis Domyślne Obecność
createNew Określa, czy zasada ma zastąpić zmienną, jeśli zmienna jest już ustawiona.

Gdy parametr ma wartość „false” (fałsz), przypisanie do zmiennej ma miejsce tylko wtedy, gdy zmienna jest aktualnie nieskonfigurowana (wartość null).

Jeśli ma wartość „true” (prawda), przypisanie zmiennej jest zawsze wykonywane.

Zazwyczaj ustawia się wartość „false” (fałsz) (wartość domyślna).

false Opcjonalnie

Element <Source>

Do dekodowania: zmienna zawierająca ciąg zakodowany w standardzie Base64 w formacie Basic Base64EncodedString. Na przykład wpisz request.header.Authorization, odpowiadający nagłówekowi Authorization.

<Source>request.header.Authorization</Source>
Domyślnie: Nie dotyczy
Obecność: Wymagany do operacji dekodowania.
Typ:

Nie dotyczy

Zmienne przepływu

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

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

Informacje o błędach

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły błędów do obsługi błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędó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 standardzie Base64 nie zawiera prawidłowej wartości lub nagłówek ma nieprawidłowy format (np. nie zaczyna się od „Podstawowe”).
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ść false (fałsz).

Błędy wdrażania

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

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

Zmienne błędów

Te zmienne są ustawiane, gdy wystąpi błąd środowiska wykonawczego. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. 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

Zasada operacji związanych z mapą klucz-wartość