Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
- Autenticazione e autorizzazione in entrata: policy Validate SAML Assertion
Il tipo di policy SAML consente ai proxy API di convalidare le asserzioni SAML allegate alle richieste SOAP in entrata. La policy SAML convalida i messaggi in entrata che contengono un' asserzione SAML firmata digitalmente, li rifiuta se non sono validi e imposta le variabili che consentono a policy aggiuntive o ai servizi di backend stessi di convalidare ulteriormente le informazioni nell'asserzione. - Generazione di token in uscita: policy Generate SAML Assertion
Il tipo di policy SAML consente ai proxy API di allegare asserzioni SAML alle richieste XML in uscita. Queste asserzioni sono quindi disponibili per consentire ai servizi di backend di applicare un'ulteriore elaborazione di sicurezza per l'autenticazione e l'autorizzazione.
Esempi
Genera asserzione 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>
Generazione di un'asserzione SAML
Convalida asserzione 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>
Convalida di un'asserzione SAML
Riferimento elemento
Generate SAML Assertion
| Nome campo | Descrizione | ||
|---|---|---|---|
Attributo name |
Il nome dell'istanza della policy. Il nome deve essere univoco nell'
organizzazione. I caratteri che puoi utilizzare nel nome sono limitati a: A-Z0-9._\-$
%. Tuttavia, l'interfaccia utente di gestione applica ulteriori limitazioni, ad esempio
la rimozione automatica dei caratteri non alfanumerici. |
||
Attributo ignoreContentType |
Un valore booleano che può essere impostato su true o false. Per impostazione predefinita, l'
asserzione non verrà generata se il tipo di contenuto del messaggio non è un tipo di contenuto XML
Content-Type. Se questo valore è impostato su true, il messaggio verrà trattato come XML
indipendentemente dal tipo di contenuto. |
||
Issuer |
L'identificatore univoco del provider di identità. Se è presente l'attributo facoltativo
ref, il valore di Issuer verrà assegnato in fase di runtime in base alla
variabile specificata. Se l'attributo facoltativo ref non è presente, verrà utilizzato il
valore di Issuer.
|
||
KeyStore |
Il nome dell'archivio chiavi che contiene la chiave privata e l'alias della chiave privata
utilizzata per firmare digitalmente le asserzioni SAML.
|
||
OutputVariable |
|||
FlowVariable |
|||
Message |
La destinazione della policy. I valori validi sono message, request,
e response. Se impostato su message, la policy recupera in modo condizionale
l'oggetto del messaggio in base al punto di collegamento della policy. Se collegata a
il flusso della richiesta, la policy risolve message nella richiesta e, se collegata a
il flusso della risposta, la policy risolve message nella risposta. |
||
XPath |
Un'espressione XPath che indica l'elemento del documento XML in uscita a cui la policy allegherà l'asserzione SAML. | ||
SignatureAlgorithm |
SHA1 o SHA256 | ||
Subject |
L'identificatore univoco del soggetto dell'asserzione SAML. Se è presente l'attributo facoltativo
ref il valore di Subject verrà assegnato in fase di
runtime in base alla variabile specificata. Se è presente l'attributo facoltativo ref, verrà utilizzato il valore di Subject.
|
||
Template |
Se presente, l'asserzione verrà generata eseguendo questo modello, sostituendo
tutto ciò che è indicato
{} con la variabile corrispondente e firmando digitalmente
il risultato. Il modello viene elaborato seguendo le regole della policy AssignMessage.
Consulta la policy Assign
Message.
|
||
Validate SAML Assertion
| Nome campo | Descrizione |
|---|---|
Attributo name |
Il nome dell'istanza della policy. Il nome deve essere univoco nell'organizzazione.
I caratteri che puoi utilizzare nel nome sono limitati a:
A-Z0-9._\-$ %.
Tuttavia, l'interfaccia utente di gestione applica ulteriori limitazioni, ad esempio la rimozione automatica
dei caratteri non alfanumerici.
|
Attributo ignoreContentType |
Un valore booleano che può essere impostato su true o false. Per impostazione predefinita, l'
asserzione non verrà generata se il tipo di contenuto del messaggio non è un tipo di contenuto XML
Content-Type. Se questo valore è impostato su true, il messaggio verrà trattato come XML
indipendentemente dal tipo di contenuto. |
Source |
La destinazione della policy. I valori validi sono message, request,
e response. Se impostato su message, la policy recupera in modo condizionale
l'oggetto del messaggio in base al punto di collegamento della policy. Se collegata a
il flusso della richiesta, la policy risolve message nella richiesta e, se collegata a
il flusso della risposta, la policy risolve message nella risposta. |
XPath |
Obsoleto. Elemento secondario di
Source. Utilizza
AssertionXPath e SignedElementXPath.
|
AssertionXPath |
Elemento secondario di
Source. Un'espressione XPath che indica l'elemento del
documento XML in entrata da cui la policy può estrarre l'asserzione SAML.
|
SignedElementXPath |
Elemento secondario di
Source. Un'espressione XPath che indica l'elemento del
documento XML in entrata da cui la policy può estrarre l'elemento firmato. Questo
può essere diverso o uguale all'XPath per il AssertionXPath.
|
TrustStore |
Il nome dell'archivio attendibilità che contiene i certificati X.509 attendibili utilizzati per convalidare
le firme digitali sulle asserzioni SAML.
|
RemoveAssertion |
Un valore booleano che può essere impostato su
true o false. Se
true, l'asserzione SAML verrà rimossa dal messaggio di richiesta prima che
il messaggio venga inoltrato al servizio di backend.
|
Note sull'utilizzo
La specifica SAML (Security Assertion Markup Language) definisce formati e protocolli che consentono alle applicazioni di scambiare informazioni in formato XML per l'autenticazione e l'autorizzazione.
Un'"asserzione di sicurezza" è un token attendibile che descrive un attributo di un'app, di un utente dell'app, o di un altro partecipante a una transazione. Le asserzioni di sicurezza vengono gestite e utilizzate da due tipi di entità:
- Provider di identità: generano asserzioni di sicurezza per conto dei partecipanti
- Fornitori di servizi: convalidano le asserzioni di sicurezza tramite relazioni attendibili con i provider di identità
La piattaforma API può fungere da provider di identità e da fornitore di servizi. Funge da provider di identità generando asserzioni e allegandole ai messaggi di richiesta, rendendole disponibili per l'elaborazione da parte dei servizi di backend. Funge da fornitore di servizi convalidando le asserzioni nei messaggi di richiesta in entrata.
Il tipo di policy SAML supporta le asserzioni SAML che corrispondono alla versione 2.0 della specifica SAML Core e alla versione 1.0 della specifica WS-Security SAML Token Profile.
Generate SAML Assertion
Elaborazione della policy:
- Se il messaggio non è XML e IgnoreContentType non è impostato su
true, allora genera un errore. - Se "Template" è impostato, elabora il modello come descritto per la policy AssignMessage. Se mancano delle variabili e IgnoreUnresolvedVariables non è impostato, genera un errore.
- Se "Template" non è impostato, crea un'asserzione che includa i valori dei parametri Subject e Issuer o i relativi riferimenti.
- Firma l'asserzione utilizzando la chiave specificata.
- Aggiungi l'asserzione al messaggio nell'XPath specificato.
Validate SAML Assertion
Elaborazione della policy:
- La policy controlla il messaggio in entrata per verificare che il tipo di supporto della richiesta sia XML, controllando se il tipo di contenuto corrisponde ai formati
text/(.*+)?xmloapplication/(.*+)?xml. Se il tipo di supporto non è XML e<IgnoreContentType>non è impostato, la policy genererà un errore. - La policy analizzerà l'XML. Se l'analisi non riesce, genererà un errore.
- La policy estrarrà l'elemento firmato e l'asserzione utilizzando i rispettivi XPath
specificati (
<SignedElementXPath>e<AssertionXPath>). Se uno di questi percorsi non restituisce un elemento, la policy genererà un errore. - La policy verificherà che l'asserzione sia uguale all'elemento firmato o sia un elemento secondario dell'elemento firmato. In caso contrario, la policy genererà un errore.
- Se uno degli elementi
<NotBefore>o<NotOnOrAfter>è presente nell'asserzione, la policy confronterà il timestamp corrente con questi valori, come descritto nella sezione 2.5.1 di SAML Core. - La policy applicherà eventuali regole aggiuntive per l'elaborazione delle "Conditions" come descritto in SAML Core sezione 2.5.1.1.
- La policy convalida la firma digitale XML utilizzando il valore dell'archivio di attendibilità
(
<TrustStore>) descritto sopra. Se la convalida non riesce, la policy genera un errore.
Una volta completata la policy senza generare errori, lo sviluppatore del proxy può essere certo di quanto segue:
- La firma digitale sull'asserzione è valida ed è stata firmata da una CA attendibile
- L'asserzione è valida per il periodo di tempo corrente
- Il soggetto e l'emittente dell'asserzione verranno estratti e impostati nelle variabili di flusso. È responsabilità di altre policy utilizzare questi valori per un'ulteriore autenticazione, ad esempio verificare che il nome del soggetto sia valido o passarlo a un sistema di destinazione per la convalida.
Per una convalida più complessa, è possibile utilizzare altre policy, come ExtractVariables, per analizzare l'XML non elaborato dell'asserzione
Variabili di flusso
In un'asserzione SAML possono essere specificate molte informazioni. L'asserzione SAML stessa è XML che può essere analizzata utilizzando la policy ExtractVariables e altri meccanismi per implementare convalide più complesse.
| Variabile | Descrizione |
|---|---|
saml.id |
L'ID dell'asserzione SAML |
saml.issuer |
L'"emittente" dell'asserzione, convertito dal tipo XML nativo a una stringa |
saml.subject |
Il "soggetto" dell'asserzione, convertito dal tipo XML nativo a una stringa |
saml.valid |
Restituisce true o false in base al risultato del controllo di validità |
saml.issueInstant |
IssueInstant |
saml.subjectFormat |
Formato del soggetto |
saml.scmethod |
Metodo di conferma del soggetto |
saml.scdaddress |
Indirizzo dei dati di conferma del soggetto |
saml.scdinresponse |
Dati di conferma del soggetto nella risposta |
saml.scdrcpt |
Destinatario dei dati di conferma del soggetto |
saml.authnSnooa |
AuthnStatement SessionNotOnOrAfter |
saml.authnContextClassRef |
AuthnStatement AuthnContextClassRef |
saml.authnInstant |
AuthnStatement AuthInstant |
saml.authnSessionIndex |
Indice sessione AuthnStatement |
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore restituiti. e le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
| Nome errore | Causa | Correggi |
|---|---|---|
SourceNotConfigured |
Uno o più dei seguenti elementi della colonna Convalida asserzione SAML
criterio non definito o vuoto: <Source>, <XPath>,
<Namespaces>, <Namespace>.
|
build |
TrustStoreNotConfigured |
Se l'elemento <TrustStore> è vuoto o non specificato nel
Convalida il criterio SAMLAssertion, il deployment del proxy API non va a buon fine.
È richiesto un archivio di attendibilità valido.
|
build |
NullKeyStoreAlias |
Se l'elemento secondario <Alias> è vuoto o non specificato nel campo <Keystore>
del criterio Genera asserzione SAML, il deployment dell'API
un errore del proxy. È richiesto un alias valido dell'archivio chiavi.
|
build |
NullKeyStore |
Se l'elemento secondario <Name> è vuoto o non specificato nel campo <Keystore>
del criterio Genera SAMLAssertion, quindi il deployment dell'API
un errore del proxy. È richiesto un nome dell'archivio chiavi valido.
|
build |
NullIssuer |
Se l'elemento <Issuer> è vuoto o non è specificato nel campo Genera SAML
Criterio di asserzione, il deployment del proxy API non va a buon fine. R
È necessario un valore <Issuer> valido.
|
build |
Variabili di errore
Queste variabili vengono impostate quando si verifica un errore di runtime. Per ulteriori informazioni, vedi Cosa devi sapere sugli errori relativi alle norme.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore. Il nome dell'errore è l'ultima parte del codice di errore. | fault.name = "InvalidMediaTpe" |
GenerateSAMLAssertion.failed |
Per una configurazione di convalida dei criteri di asserzione SAML, il prefisso di errore è
ValidateSAMLAssertion. |
GenerateSAMLAssertion.failed = true |
Esempio di risposta di errore
{ "fault": { "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type", "detail": { "errorcode": "steps.saml.generate.InvalidMediaTpe" } } }
Esempio di regola di errore
<FaultRules>
<FaultRule name="invalid_saml_rule">
<Step>
<Name>invalid-saml</Name>
</Step>
<Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
</FaultRule>
</FaultRules>Argomenti correlati
Estrazione delle variabili: Extract Variables policy