Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Co
- Zasada Inbound authentication and authorization: Validate SAML Assertion
Typ zasady SAML umożliwia serwerom proxy interfejsu API weryfikowanie asercji SAML dołączonych do przychodzących żądań SOAP. Zasady SAML sprawdzają przychodzące wiadomości zawierające podpisane cyfrowo potwierdzenie SAML, odrzucają je, jeśli są nieprawidłowe, i ustawiają zmienne, które umożliwiają dodatkowym zasadom lub usługom backendu dalsze sprawdzanie informacji w potwierdzeniu. - Generowanie tokenów wychodzących: zasady generowania asercji SAML
Typ zasad SAML umożliwia serwerom proxy interfejsu API dołączanie asercji SAML do wychodzących żądań XML. Te potwierdzenia są następnie dostępne, aby umożliwić usługom backendu stosowanie dodatkowych zabezpieczeń w celu uwierzytelniania i autoryzacji.
Przykłady
Generowanie asercji SAML
<GenerateSAMLAssertion name="SAML" ignoreContentType="false"> <CanonicalizationAlgorithm /> <Issuer ref="reference">Issuer name</Issuer> <KeyStore> <Name ref="reference">keystorename</Name> <Alias ref="reference">alias</Alias> </KeyStore> <OutputVariable> <FlowVariable>assertion.content</FlowVariable> <Message name="request"> <Namespaces> <Namespace prefix="test">http://www.example.com/test</Namespace> </Namespaces> <XPath>/envelope/header</XPath> </Message> </OutputVariable> <SignatureAlgorithm /> <Subject ref="reference">Subject name</Subject> <Template ignoreUnresolvedVariables="false"> <!-- A lot of XML goes here, in CDATA, with {} around each variable --> </Template> </GenerateSAMLAssertion>
Generowanie asercji SAML
Weryfikowanie asercji SAML
<ValidateSAMLAssertion name="SAML" ignoreContentType="false"> <Source name="request"> <Namespaces> <Namespace prefix='soap'>http://schemas.xmlsoap.org/soap/envelope/</Namespace> <Namespace prefix='wsse'>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd</Namespace> <Namespace prefix='saml'>urn:oasis:names:tc:SAML:2.0:assertion</Namespace> </Namespaces> <AssertionXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</AssertionXPath> <SignedElementXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</SignedElementXPath> </Source> <TrustStore>TrustStoreName</TrustStore> <RemoveAssertion>false</RemoveAssertion> </ValidateSAMLAssertion>
Weryfikowanie asercji SAML
Odwołanie do elementu
Generowanie asercji SAML
| Nazwa pola | Opis | ||
|---|---|---|---|
name atrybut |
Nazwa instancji zasady. Nazwa musi być unikalna w organizacji. W nazwie możesz używać tylko tych znaków: A-Z0-9._\-$
%. Interfejs zarządzania wymusza jednak dodatkowe ograniczenia, takie jak automatyczne usuwanie znaków, które nie są alfanumeryczne. |
||
ignoreContentType atrybut |
Wartość logiczna, którą można ustawić na true lub false. Domyślnie asercja nie jest generowana, jeśli typ treści wiadomości nie jest typem treści XML. Jeśli ta opcja jest ustawiona na true, wiadomość będzie traktowana jako XML niezależnie od typu treści. |
||
Issuer |
Unikalny identyfikator dostawcy tożsamości. Jeśli występuje opcjonalny atrybut
ref, wartość atrybutu Issuer zostanie przypisana w czasie działania na podstawie określonej zmiennej. Jeśli opcjonalny atrybut ref nie jest obecny, zostanie użyta wartość atrybutu Issuer.
|
||
KeyStore |
Nazwa magazynu kluczy zawierającego klucz prywatny i alias klucza prywatnego
używanego do podpisywania cyfrowego asercji SAML.
|
||
OutputVariable |
|||
FlowVariable |
|||
Message |
Cel zasady. Prawidłowe wartości to message, request i response. Jeśli zasada ma wartość message, warunkowo pobiera obiekt wiadomości na podstawie punktu przyłączenia zasady. Gdy zasada jest dołączona do przepływu żądania, message jest rozpoznawane jako żądanie, a gdy jest dołączona do przepływu odpowiedzi, message jest rozpoznawane jako odpowiedź. |
||
XPath |
Wyrażenie XPath, które wskazuje element w wychodzącym dokumencie XML, do którego zasady dołączą asercję SAML. | ||
SignatureAlgorithm |
SHA1 lub SHA256 | ||
Subject |
Unikalny identyfikator podmiotu asercji SAML. Jeśli występuje opcjonalny atrybut
ref, wartość atrybutu Subject zostanie przypisana w czasie działania na podstawie określonej zmiennej. Jeśli występuje opcjonalny atrybut ref, używana jest wartość atrybutu Subject.
|
||
Template |
Jeśli jest obecny, asercja zostanie wygenerowana przez uruchomienie tego szablonu, zastąpienie wszystkiego oznaczonego symbolem
{} odpowiednią zmienną, a następnie podpisanie cyfrowe wyniku. Szablon jest przetwarzany zgodnie z regułami zasad AssignMessage.
Zobacz Przypisywanie zasad dotyczących wiadomości.
|
||
Weryfikowanie asercji SAML
| Nazwa pola | Opis |
|---|---|
name atrybut |
Nazwa instancji zasady. Nazwa musi być unikalna w organizacji.
W nazwie możesz używać tylko tych znaków:
A-Z0-9._\-$ %.
Interfejs zarządzania wymusza jednak dodatkowe ograniczenia, takie jak automatyczne usuwanie znaków, które nie są alfanumeryczne.
|
ignoreContentType atrybut |
Wartość logiczna, którą można ustawić na true lub false. Domyślnie asercja nie jest generowana, jeśli typ treści wiadomości nie jest typem treści XML. Jeśli ta opcja jest ustawiona na true, wiadomość będzie traktowana jako XML niezależnie od typu treści. |
Source |
Cel zasady. Prawidłowe wartości to message, request i response. Jeśli zasada ma wartość message, warunkowo pobiera obiekt wiadomości na podstawie punktu przyłączenia zasady. Gdy zasada jest dołączona do przepływu żądania, message jest rozpoznawane jako żądanie, a gdy jest dołączona do przepływu odpowiedzi, message jest rozpoznawane jako odpowiedź. |
XPath |
Wycofano. Dziecko
Source. Należy użyć właściwości AssertionXPath i SignedElementXPath.
|
AssertionXPath |
Dziecko
Source. Wyrażenie XPath, które wskazuje element w przychodzącym dokumencie XML, z którego zasady mogą wyodrębnić asercję SAML.
|
SignedElementXPath |
Dziecko
Source. Wyrażenie XPath, które wskazuje element w przychodzącym dokumencie XML, z którego zasady mogą wyodrębnić podpisany element. Może się on różnić od ścieżki XPath dla elementu AssertionXPath lub być z nią taki sam.
|
TrustStore |
Nazwa magazynu zaufania zawierającego zaufane certyfikaty X.509 używane do weryfikacji podpisów cyfrowych w asercjach SAML.
|
RemoveAssertion |
Wartość logiczna, którą można ustawić na
true lub false. Gdy true, asercja SAML zostanie usunięta z wiadomości z żądaniem, zanim zostanie ona przekazana do usługi backendu.
|
Zastosowanie
Specyfikacja SAML (Security Assertion Markup Language) określa formaty i protokoły, które umożliwiają aplikacjom wymianę informacji w formacie XML na potrzeby uwierzytelniania i autoryzacji.
„Asercja bezpieczeństwa” to zaufany token, który opisuje atrybut aplikacji, użytkownika aplikacji lub innego uczestnika transakcji. Asercje zabezpieczeń są zarządzane i wykorzystywane przez 2 rodzaje podmiotów:
- Dostawcy tożsamości: generowanie potwierdzeń bezpieczeństwa w imieniu uczestników
- Dostawcy usług: weryfikowanie potwierdzeń bezpieczeństwa za pomocą zaufanych relacji z dostawcami tożsamości
Platforma interfejsu API może pełnić rolę dostawcy tożsamości i dostawcy usług. Pełni rolę dostawcy tożsamości, generując asercje i dołączając je do wiadomości z żądaniami, dzięki czemu są one dostępne do przetwarzania przez usługi backendu. Pełni rolę dostawcy usług, ponieważ weryfikuje potwierdzenia w przychodzących wiadomościach z żądaniami.
Typ zasady SAML obsługuje asercje SAML zgodne z wersją 2.0 specyfikacji SAML Core i wersją 1.0 specyfikacji WS-Security SAML Token Profile.
Generowanie asercji SAML
Przetwarzanie zasad:
- Jeśli wiadomość nie jest w formacie XML, a parametr IgnoreContentType nie ma wartości
true, zgłoś błąd. - Jeśli ustawiona jest opcja „Template”, szablon jest przetwarzany zgodnie z opisem w przypadku zasady AssignMessage. Jeśli brakuje zmiennych, a parametr IgnoreUnresolvedVariables nie jest ustawiony, zgłoś błąd.
- Jeśli parametr „Template” nie jest ustawiony, utwórz potwierdzenie zawierające wartości parametrów Subject i Issuer lub ich odwołania.
- Podpisz asercję za pomocą określonego klucza.
- Dodaj asercję do wiadomości w określonym XPath.
Weryfikowanie asercji SAML
Przetwarzanie zasad:
- Zasada sprawdza wiadomość przychodzącą, aby zweryfikować, czy typ nośnika żądania to XML. W tym celu sprawdza, czy typ treści jest zgodny z formatami
text/(.*+)?xmllubapplication/(.*+)?xml. Jeśli typ nośnika nie jest XML-em i atrybut<IgnoreContentType>nie jest skonfigurowany, zasada zgłosi błąd. - Zasada przeanalizuje kod XML. Jeśli analiza się nie powiedzie, zgłosi błąd.
- Zasady wyodrębniają podpisany element i asercję, używając odpowiednich ścieżek XPath (
<SignedElementXPath>i<AssertionXPath>). Jeśli któraś z tych ścieżek nie zwraca elementu, zasady zgłaszają błąd. - Zasady sprawdzą, czy potwierdzenie jest takie samo jak podpisany element lub czy jest elementem podrzędnym podpisanego elementu. Jeśli tak nie jest, zasada zgłosi błąd.
- Jeśli w asercji występuje element
<NotBefore>lub<NotOnOrAfter>, zasada sprawdzi bieżący sygnaturę czasową w porównaniu z tymi wartościami zgodnie z sekcją 2.5.1 specyfikacji SAML Core. - Zasady będą stosować wszelkie dodatkowe reguły przetwarzania „Warunków” zgodnie z opisem w sekcji 2.5.1.1 standardu SAML Core.
- Zasada weryfikuje podpis cyfrowy XML za pomocą wartości magazynu zaufanych certyfikatów (
<TrustStore>) opisanej powyżej. Jeśli weryfikacja się nie powiedzie, zasady zgłoszą błąd.
Gdy zasada zostanie wykonana bez zgłaszania błędów, deweloper serwera proxy może mieć pewność, że:
- Podpis cyfrowy w asercji jest ważny i został podpisany przez zaufany urząd certyfikacji.
- Asercja jest ważna w bieżącym okresie.
- Temat i wystawca asercji zostaną wyodrębnione i ustawione w zmiennych przepływu. Za używanie tych wartości do dodatkowego uwierzytelniania, np. sprawdzania, czy nazwa podmiotu jest prawidłowa, lub przekazywania jej do systemu docelowego w celu weryfikacji, odpowiadają inne zasady.
Do bardziej złożonej weryfikacji można używać innych zasad, takich jak ExtractVariables, do analizowania nieprzetworzonego kodu XML asercji.
Zmienne przepływu
Potwierdzenie SAML może zawierać wiele informacji. Sama asercja SAML to XML, który można przeanalizować za pomocą zasady ExtractVariables i innych mechanizmów, aby wdrożyć bardziej złożone weryfikacje.
| Zmienna | Opis |
|---|---|
saml.id |
Identyfikator asercji SAML |
saml.issuer |
„Wystawca” asercji przekonwertowany z natywnego typu XML na ciąg znaków. |
saml.subject |
„Podmiot” asercji przekonwertowany z natywnego typu XML na ciąg znaków. |
saml.valid |
Zwraca wartość „prawda” lub „fałsz” na podstawie wyniku sprawdzania poprawności. |
saml.issueInstant |
IssueInstant |
saml.subjectFormat |
Format tematu |
saml.scmethod |
Metoda potwierdzenia podmiotu |
saml.scdaddress |
Adres danych potwierdzających podmiot |
saml.scdinresponse |
Dane potwierdzenia podmiotu w odpowiedzi |
saml.scdrcpt |
Odbiorca danych potwierdzenia podmiotu |
saml.authnSnooa |
Sesja AuthnStatementNotOnOrAfter |
saml.authnContextClassRef |
AuthnStatement AuthnContextClassRef |
saml.authnInstant |
AuthnStatement AuthInstant |
saml.authnSessionIndex |
Indeks sesji AuthnStatement |
Odwołanie do błędu
W tej sekcji opisano zwracane kody błędów i komunikaty o błędach i zmiennych błędów, które są ustawiane przez Edge, gdy ta zasada wywołuje 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 wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.
| Nazwa błędu | Przyczyna | Napraw |
|---|---|---|
SourceNotConfigured |
Co najmniej jeden z następujących elementów metody Validate SAML Assertion
zasada nie jest zdefiniowana lub pusta: <Source>, <XPath>,
<Namespaces>, <Namespace>.
|
build |
TrustStoreNotConfigured |
Jeśli element <TrustStore> jest pusty lub nie został określony w polu
Po sprawdzeniu zasady SAMLAssertion nie uda się wdrożyć serwera proxy interfejsu API.
Wymagany jest prawidłowy magazyn zaufania.
|
build |
NullKeyStoreAlias |
Jeśli element podrzędny <Alias> jest pusty lub nie został określony w elemencie <Keystore>
elementu zasad Generate SAML Assertion policy, a następnie wdrożenia interfejsu API.
serwer proxy nie działa. Wymagany jest prawidłowy alias magazynu kluczy.
|
build |
NullKeyStore |
Jeśli element podrzędny <Name> jest pusty lub nie został określony w elemencie <Keystore>
elementu zasady GenerateSAMLAssertion, a następnie wdrożenie interfejsu API
serwer proxy nie działa. Wymagana jest prawidłowa nazwa magazynu kluczy.
|
build |
NullIssuer |
Jeśli element <Issuer> jest pusty lub nie został określony w zasadzie Generate SAML (Wygeneruj SAML)
Zasada asercji, wtedy wdrożenie serwera proxy interfejsu API się nie uda. O
wymagana jest prawidłowa wartość <Issuer>.
|
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 . Nazwa błędu to ostatnia część kodu błędu. | fault.name = "InvalidMediaTpe" |
GenerateSAMLAssertion.failed |
W przypadku walidacji konfiguracji zasady asercji SAML prefiks błędu to
ValidateSAMLAssertion |
GenerateSAMLAssertion.failed = true |
Przykładowa odpowiedź na błąd
{ "fault": { "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type", "detail": { "errorcode": "steps.saml.generate.InvalidMediaTpe" } } }
Przykładowa reguła błędu
<FaultRules>
<FaultRule name="invalid_saml_rule">
<Step>
<Name>invalid-saml</Name>
</Step>
<Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
</FaultRule>
</FaultRules>Powiązane artykuły
Wyodrębnianie zmiennych: zasady Extract Variables