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 Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> 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 |
|---|---|
| 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:
|
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
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. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami
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 | Do dekodowania, gdy przychodzący ciąg zakodowany w standardzie Base64 nie zawiera prawidłowej wartości lub nagłówek jest nieprawidłowy (np. nie zaczyna się od „Podstawowy”). | build |
steps.basicauthentication.UnresolvedVariable |
500 | Brak zmiennych źródłowych wymaganych do dekodowania lub kodowania. Ten błąd może spowodować
występuje tylko wtedy, gdy IgnoreUnresolvedVariables ma wartość fałsz. |
build |
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 operacji nazwanej musi znajdować się element <User>. |
build |
PasswordRequired |
W operacji nazwanej musi znajdować się element <Password>. |
build |
AssignToRequired |
W operacji nazwanej musi znajdować się element <AssignTo>. |
build |
SourceRequired |
W operacji nazwanej musi znajdować się element <Source>. |
build |
Zmienne błędów
Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje 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 czasu działania powyżej. Nazwa błędu to ostatnia część 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>