SAMLAssertion policy (Criteri di asserzione SAML)

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

icona delle norme

Cosa

  • Autenticazione e autorizzazione in entrata: convalida del criterio di asserzione SAML
    Il tipo di criterio SAML consente ai proxy API di convalidare le asserzioni SAML allegate alle richieste SOAP in entrata. Il criterio SAML convalida i messaggi in arrivo che contengono un'affermazione SAML firmata digitalmente, li rifiuta se non sono validi e imposta variabili che consentono a criteri aggiuntivi o ai servizi di backend stessi di convalidare ulteriormente le informazioni nell'affermazione.
  • Generare token in uscita: genera criterio di asserzione SAML
    Il tipo di criterio 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.

Questo criterio è una norma estendibile e il suo utilizzo potrebbe comportare costi o di utilizzo delle applicazioni, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni per l'utilizzo, consulta Tipi di criteri.

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="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>
      </Namespaces>
      <XPath>/soap:Envelope/soap:Header/wsse:Security</XPath>
    </Message>
  </OutputVariable>
  <SignatureAlgorithm />
  <Subject ref="reference">Subject name</Subject>
  <Template ignoreUnresolvedVariables="false">
    <!-- A lot of XML goes here, within CDATA, with {} around
         each variable -->
  </Template>
</GenerateSAMLAssertion>

Generazione di un'affermazione SAML

Convalida l'affermazione 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

Genera asserzione SAML

Nome campo Descrizione
Attributo name Il nome dell'istanza del criterio. Il nome deve essere univoco all'interno dell'organizzazione. I caratteri che puoi utilizzare nel nome sono limitati a: A-Z0-9._\-$ %. Tuttavia, l'interfaccia utente di Apigee 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'affermazione non verrà generata se il tipo di contenuto del messaggio non è un Content-Type XML. Se viene impostato su true, il messaggio verrà trattato come XML a prescindere dal tipo di contenuto.
Issuer
L'identificatore univoco del provider di identità. Se l'attributo facoltativo ref , il valore di Issuer verrà assegnato in fase di runtime in base 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 per firmare digitalmente le asserzioni SAML.
OutputVariable
FlowVariable
Message La destinazione del criterio. I valori validi sono message, request e response. Se impostato su message, il criterio recupera condizionatamente l'oggetto del messaggio in base al punto di attacco del criterio. Se associato a flusso della richiesta, il criterio risolve message in richiesta e, quando è collegato a il flusso di risposta, il criterio risolve message in risposta.
XPath Un'espressione XPath che indica l'elemento del documento XML in uscita a cui il criterio collegherà l'affermazione SAML.
SignatureAlgorithm SHA1 o SHA256
Subject
L'identificatore univoco del soggetto dell'asserzione SAML. Se l'oggetto facoltativo L'attributo ref è presente, il valore di Subject verrà assegnato a in base alla variabile specificata. Se l'attributo facoltativo ref è presente, verrà usato il valore Subject.
Template
Se presente, l'affermazione verrà generata eseguendo questo modello, sostituendo tutto ciò che è indicato con {} con la variabile corrispondente e poi firmando digitalmente il risultato. Il modello viene elaborato in base alle regole del criterio AssignMessage. Consulta le norme di AssignMessage.

Convalida asserzione SAML

Nome campo Descrizione
Attributo name
Il nome dell'istanza del criterio. 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 Apigee applica limitazioni aggiuntive, 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 XML Content-Type. Se questo valore è impostato su true, il messaggio verrà trattato come XML indipendentemente dal tipo di contenuto.
Source La destinazione del criterio. I valori validi sono message, request, e response. Se impostato su message, il criterio recupera condizionatamente l'oggetto del messaggio in base al punto di attacco del criterio. Se è associato al flusso di richiesta, il criterio risolve message in request e, se è associato al flusso di risposta, risolve message in response.
XPath
Ritiro. Figlio di Source. Utilizza AssertionXPath e SignedElementXPath.
AssertionXPath
Figlio di Source. Un'espressione XPath che indica l'elemento nella documento XML in entrata da cui il criterio può estrarre l'asserzione SAML.
SignedElementXPath
Secondario di Source. Un'espressione XPath che indica l'elemento nel documento XML in entrata da cui il criterio può estrarre l'elemento firmato. Questo potrebbe essere diverso o uguale all'XPath dell'AssertionXPath.
TrustStore
Il nome del TrustStore che contiene i certificati X.509 attendibili utilizzati per la convalida le firme digitali sulle asserzioni SAML.
RemoveAssertion
Un valore booleano che può essere impostato su true o false. Quando true, l'affermazione SAML viene 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 i formati e i protocolli che consente alle applicazioni di scambiare informazioni in formato XML per l'autenticazione e autorizzazione.

Un'"affermazione 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 sono gestite e utilizzate da due tipi di entità:

  • Provider di identità: generazione di asserzioni di sicurezza per conto dei partecipanti
  • Fornitori di servizi: convalida delle affermazioni 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 il provider di identità generando asserzioni e allegandole ai messaggi di richiesta, in modo che disponibili per l'elaborazione da parte dei servizi di backend. Funge da fornitore di servizi convalidare le asserzioni nei messaggi di richiesta in entrata.

Il tipo di criterio SAML supporta le asserzioni SAML che corrispondono alla versione 2.0 della specifica di base di SAML e alla versione 1.0 della specifica del profilo token SAML di WS-Security.

Genera asserzione SAML

Elaborazione delle norme:

  1. Se il messaggio non è in formato XML e IgnoraContentType non è impostato su true, segnalare un errore.
  2. Se è impostato il valore "Modello", elabora il modello come descritto per il criterio AssignMessage. Se mancano delle variabili e IgnoraUnresolvedVariables non è impostata, genera un errore.
  3. Se "Modello" se non è impostato, crea un'asserzione che includa i valori dei Parametri soggetto ed emittente o relativi riferimenti.
  4. Firma l'affermazione utilizzando la chiave specificata.
  5. Aggiungi l'asserzione al messaggio nell'XPath specificato.

Convalida asserzione SAML

Elaborazione delle norme:

  1. Il criterio controlla il messaggio in entrata per verificare che il tipo di media della richiesta sia XML, controllando se il tipo di contenuto corrisponde ai formati text/(.*+)?xml o application/(.*+)?xml. Se il tipo di media non è XML e <IgnoreContentType> non è impostato, il criterio genera un errore.
  2. Il criterio analizzerà il file XML. Se l'analisi non riesce, genera un errore.
  3. Il criterio estrae l'elemento firmato e l'affermazione utilizzando i rispettivi XPath specificati (<SignedElementXPath> e <AssertionXPath>). Se uno di questi percorsi non restituisce un elemento, il criterio genera un errore.
  4. Il criterio verificherà che l'affermazione sia uguale all'elemento firmato o sia un elemento secondario dell'elemento firmato. In caso contrario, il criterio genererà un errore.
  5. Se nell'affermazione sono presenti uno degli elementi <NotBefore> o <NotOnOrAfter>, il criterio controllerà il timestamp corrente in base a questi valori, come descritto nella sezione 2.5.1 di SAML Core.
  6. Il criterio applicherà eventuali regole aggiuntive per l'elaborazione delle "Condizioni" come descritto nella sezione 2.5.1.1 di SAML Core.
  7. Il criterio convaliderà la firma digitale XML utilizzando i valori di <TrustStore> e <ValidateSigner> come descritto sopra. Se la convalida non va a buon fine, il criterio genera un errore.

Una volta completata la verifica senza generare un errore, lo sviluppatore del proxy può essere certo di quanto segue:

  • La firma digitale sull'affermazione è valida ed è stata firmata da un'autorità di certificazione attendibile
  • L'asserzione è valida per il periodo di tempo corrente
  • L'oggetto e l'emittente dell'asserzione verranno estratti e impostati nelle variabili di flusso. È compito di altri criteri utilizzare questi valori per un'autenticazione aggiuntiva, ad esempio per verificare che il nome dell'oggetto sia valido o per trasmetterlo a un sistema di destinazione per la convalida.

Per analizzare il codice XML non elaborato dell'asserzione è possibile utilizzare altri criteri, come ExtractVariables per una convalida più complessa.


Variabili di flusso

In un'asserzione SAML è possibile specificare molte informazioni. Il protocollo SAML l'asserzione stessa è un file XML che può essere analizzato utilizzando il criterio ExtractVariables e altro in modo da implementare convalide più complesse.

Variabile Descrizione
saml.id L'ID asserzione SAML
saml.issuer L'"Emittente" dell'asserzione, convertito dal tipo XML nativo in una stringa
saml.subject L'attributo "Subject" dell'affermazione, convertito dal tipo XML nativo in una stringa
saml.valid Restituisce true o false in base al risultato del controllo di validità
saml.issueInstant IssueInstant
saml.subjectFormat Formato dell'oggetto
saml.scmethod Metodo di conferma del soggetto
saml.scdaddress Indirizzo dei dati di conferma del soggetto
saml.scdinresponse Dati di conferma dell'oggetto nella risposta
saml.scdrcpt Destinatario dei dati di conferma dell'oggetto
saml.authnSnooa AuthnStatement SessionNotOnOrAfter
saml.authnContextClassRef AuthnStatement AuthnContextClassRef
saml.authnInstant AuthnStatement AuthIstantanea
saml.authnSessionIndex AuthnStatement Session Index

Messaggi di errore

Questa sezione descrive i codici e i messaggi di errore restituiti. e le variabili di errore impostate da Apigee quando questo criterio attiva un errore. Queste informazioni sono importanti se stai sviluppando regole di errore 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 dell'errore Causa Correggi
SourceNotConfigured Uno o più dei seguenti elementi del criterio ValidateSAMLAssertion non sono definiti o sono vuoti: <Source>, <XPath>, <Namespaces>, <Namespace>.
TrustStoreNotConfigured Se l'elemento <TrustStore> è vuoto o non specificato nel ValidateSAMLAssertion, il deployment del proxy API non va a buon fine. È necessario un truststore valido.
NullKeyStoreAlias Se l'elemento figlio <Alias> è vuoto o non specificato nell'elemento <Keystore> del criterio GenerateSAMLAssertion, il deployment del proxy dell'API non va a buon fine. È necessario un alias del keystore valido.
NullKeyStore Se l'elemento secondario <Name> è vuoto o non specificato nel campo <Keystore> del criterio GenerateSAMLAssertion, il deployment dell'API un errore del proxy. È necessario un nome del keystore valido.
NullIssuer Se l'elemento <Issuer> è vuoto o non specificato nel GenerateSAMLAssertion, il deployment del proxy API non va a buon fine. È obbligatorio un valore <Issuer> valido.

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 dei criteri di asserzione SAML valida, il prefisso dell'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 di variabili: Estrai variabili norme