Podstawowe zasady uwierzytelniania

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Co

Umożliwia korzystanie z uproszczonego podstawowego uwierzytelniania na potrzeby zabezpieczenia ostatniego etapu. Zasada pobiera nazwę użytkownika i hasło, koduje je w formacie Base64 i zapisuje wynikową wartość w zmiennej. Wynikowa wartość ma postać Basic Base64EncodedString. Zazwyczaj zapisujesz tę wartość w nagłówku HTTP, np. w nagłówku Authorization.

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

Film: z tego filmu dowiesz się, jak zakodować nazwę użytkownika i hasło w formacie Base64 za pomocą zasady podstawowego uwierzytelniania.

Film: z tego filmu dowiesz się, jak zdekodować nazwę użytkownika i hasło zakodowane w formacie Base64 za pomocą zasady podstawowego uwierzytelniania.

Przykłady

Kodowanie wychodzące

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

W powyższej przykładowej konfiguracji zasady nazwa użytkownika i hasło, które mają zostać zakodowane, są pobierane ze zmiennych określonych przez atrybuty ref w elementach <User> i <Password>. Zmienne muszą być ustawione przed wykonaniem tej zasady. Zazwyczaj zmienne są wypełniane wartościami odczytywanymi z mapy klucz-wartość. Zobacz zasadę operacji na mapach klucz-wartość.

Ta konfiguracja powoduje dodanie do wychodzącego komunikatu żądania wysyłanego do serwera backendu nagłówka HTTP o nazwie Authorization, zgodnie z definicją elementu <AssignTo>, :

Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk

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

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

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

Dołącz te zasady KeyValueMapOperations przed zasadą BasicAuthentication aby móc wyodrębnić wartości elementów <User> i <Password> z magazynu klucz-wartość i wypełnić nimi zmienne 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 zasady zasada dekoduje nazwę użytkownika i hasło z Authorization nagłówka HTTP, zgodnie z definicją elementu <Source>. Ciąg zakodowany w formacie Base64 musi mieć postać Basic Base64EncodedString.

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


Informacje o zasadzie podstawowego uwierzytelniania

Zasada ma 2 tryby działania:

  • Encode (Kodowanie): koduje nazwę użytkownika i hasło przechowywane w zmiennych w formacie Base64.
  • Decode (Dekodowanie): dekoduje nazwę użytkownika i hasło z ciągu zakodowanego w formacie Base64.

Nazwa użytkownika i hasło są zwykle przechowywane w magazynie klucz-wartość, a następnie odczytywane z niego w czasie działania. Więcej informacji o korzystaniu z magazynu klucz-wartość znajdziesz w artykule Zasada operacji na mapach klucz-wartość policy.

Dokumentacja elementów

Dokumentacja elementów opisuje elementy i atrybuty zasady 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="credentials.username" />
   <Password ref="credentials.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
   <Source>request.header.Authorization</Source> 
</BasicAuthentication>

Atrybuty elementu <BasicAuthentication>

<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

Element <Operation>

Określa, czy zasada ma kodować, czy dekodować dane logowania w formacie Base64.

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

Ciąg tekstowy.

Prawidłowe wartości:

  • Kodowanie
  • Decode

Element <IgnoreUnresolvedVariables>

Jeśli ustawisz wartość true, zasada nie zgłosi błędu, jeśli nie będzie można rozpoznać zmiennej. W przypadku zasady BasicAuthentication to ustawienie jest zwykle ustawione na false ponieważ w przypadku nieznalezienia nazwy użytkownika lub hasła w określonych zmiennych zwykle korzystne jest zgłoszenie błędu.

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Domyślnie: prawda
Obecność: Opcjonalny
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ą łączone dwukropkiem przed zakodowaniem w formacie Base64.
  • W przypadku dekodowania określ zmienną, w której ma zostać zapisana zdekodowana nazwa użytkownika.
<User ref="credentials.username" /> 
Domyślnie: Nie dotyczy
Obecność: Wymagane
Typ:

Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność
ref

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

Nie dotyczy Wymagane

Element <Password>

  • W przypadku kodowania użyj elementu <Password>, aby określić zmienną zawierającą hasło.
  • W przypadku dekodowania określ zmienną, w której ma zostać zapisane zdekodowane hasło.
<Password ref="credentials.password" />
Domyślnie: Nie dotyczy
Obecność: Wymagane
Typ:

Nie dotyczy

Atrybuty

Atrybut Opis Domyślny Obecność
ref

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

Nie dotyczy Wymagane

Element <AssignTo>

W przypadku operacji Encode określa zmienną docelową, w której ma zostać ustawiona zakodowana wartość wygenerowana przez tę zasadę.

Ten przykład pokazuje, że zasada powinna ustawić nagłówek Authorization wiadomości na wygenerowaną wartość:

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

Ciąg znaków

Atrybuty

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

Jeśli wartość to "false", przypisanie do zmiennej następuje tylko wtedy, gdy zmienna jest obecnie nieskonfigurowana (ma wartość null).

Jeśli wartość to „true”, przypisanie do zmiennej następuje zawsze.

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

fałsz Opcjonalny

Element <Source>

W przypadku dekodowania zmienna zawierająca ciąg zakodowany w formacie Base64 w postaci Basic Base64EncodedString. Na przykład, określ request.header.Authorization, co odpowiada nagłówkowi Authorization.

<Source>request.header.Authorization</Source>
Domyślnie: Nie dotyczy
Obecność: Wymagane w przypadku operacji Decode.
Typ:

Nie dotyczy

Zmienne przepływu

Gdy zasada się nie powiedzie, ustawiana jest ta zmienna przepływu:

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

Dokumentacja błędów

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

Zasada operacji na mapach klucz-wartość