SAML

Se si utilizza un identity provider basato su SAML, è possibile configurare App ID per avviare un'esperienza di single sign-on (SSO). In questo tipo di flusso, App ID agisce come fornitore di servizi e fornisce token di sicurezza per i vostri utenti attivi mensili (MAU).

Descrizione di SAML

SAML (Security Assertion Markup Language) è uno standard aperto utilizzato per scambiare i dati di autenticazione e autorizzazione tra il provider di identità che asserisce un'identità e un provider che utilizza le informazioni sull'identità. SAML 2.0 è basato su XML ed è un quadro consolidato per gli standard di autenticazione e autorizzazione.

Il protocollo SAML fornisce un bridge tra App ID (provider di servizi) e il tuo provider di identità. Quando il fornitore di identità autentica un utente, crea i token SAML che contengono informazioni sull'utente, come le modalità di autenticazione, gli attributi associati o i parametri di autorizzazione. Consulta la seguente tabella per degli esempi.

Capire i tipi di informazioni restituite in un token SAML
Tipo di informazioni Esempi
Autenticazione Gli utenti possono autenticarsi con una password, utilizzando l'MFA o in un altro modo.
Attributi Tutti gli attributi come i gruppi a cui appartengono o una preferenza di qualche tipo.
Decisioni di autorizzazione Agli utenti occasionali potrebbero essere concesse più o meno autorizzazioni degli altri.

Come si presenta il flusso?

Sebbene il framework SAML sia utilizzato per autenticare l'utente, App ID utilizza ancora un protocollo OIDC più moderno per scambiare i token di sicurezza con la tua applicazione. Consulta la seguente immagine per vedere un flusso dettagliato di informazioni.

SAML flusso di autenticazione aziendale Come funziona un flusso di autenticazione aziendale
SAML

  1. Un utente accede alla pagina di login o a una risorsa riservata della propria applicazione, che avvia una richiesta all'endpoint App ID /authorization tramite un SDK o un'API App ID. Se l'utente non è autorizzato, il flusso di autenticazione inizia con un reindirizzamento a App ID.
  2. App ID genera una richiesta di autenticazione SAML (AuthNRequest) e il browser reindirizza automaticamente l'utente al provider di identità SAML.
  3. Il provider di identità analizza la richiesta SAML, autentica l'utente e genera una risposta SAML con le relative asserzioni.
  4. Il provider di identità reindirizza l'utente e la risposta a App ID con la risposta SAML.
  5. Se l'autenticazione ha esito positivo, App ID crea dei token di identità e accesso che rappresentano l'autenticazione e l'autorizzazione di un utente e li restituisce all'applicazione. Se l'autenticazione ha esito negativo, App ID restituisce il codice di errore del provider di identità all'applicazione.
  6. All'utente viene concesso l'accesso all'applicazione o alle risorse protette.

Come SSO modifica il flusso?

Il flusso di lavoro per SSO è simile. L'unica differenza dal flusso di lavoro descritto si trova nel passo 3 della sezione precedente. Con SSO abilitato, prima che a un utente venga richiesto di autenticarsi, il provider di identità controlla se un utente dispone già di una sessione di autenticazione stabilita. Se è così, all'utente non viene chiesto di autenticarsi e il flusso continua come al solito. Se non è disponibile una sessione SSO, l'utente viene reindirizzato a una pagina di accesso. Potrebbe essere reindirizzato anche se il tuo provider di identità non può soddisfare i requisiti di autenticazione definiti nella richiesta di App ID che è stata utilizzata per stabilire l'SSO. Ad esempio, se il tuo provider di identità stabilisce una sessione SSO utente utilizzando i dati biometrici, l'autenticazione predefinita di App ID deve essere modificata. Per impostazione predefinita, App ID assume che gli utenti vengano autenticati tramite una password su HTTPS: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport.

Descrizione delle asserzioni

Quando l'asserzione SAML viene restituita a App ID, il servizio attua la federazione dell'identità dell'utente e genera i token appropriati. Se corrisponde a una delle attestazioni OIDC standard, l'asserzione SAML viene automaticamente aggiunta al token di identità. Le asserzioni che non hanno una corrispondenza, vengono ignorate per impostazione predefinita. Se il fornitore SAML restituisce altre asserzioni, è possibile configurare App ID per iniettare le informazioni nei token. Tuttavia, assicuratevi di non aggiungere più informazioni del necessario ai vostri token, poiché sono tipicamente inviati nelle intestazioni di HTTP e sono limitati.

Le attestazioni OIDC standard che App ID tenta di associare alla tua asserzione:

  • name
  • email
  • locale
  • picture

Se uno o più di questi valori viene modificato sul lato del provider di identità, i nuovi valori sono disponibili dopo che l'utente ha effettuato di nuovo l'accesso.

Quale aspetto deve avere un'asserzione SAML per App ID?

Il servizio prevede che un'asserzione SAML sia simile al seguente esempio.

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s2202bbbbafa9d270d1c15990b738f4ab36139d463" InResponseTo="_e4a78780-35da-012e-8ea7-0050569200d8" Version="2.0" IssueInstant="2011-03-21T11:22:02Z" Destination="https://example.example.com/">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">idp_entityId</saml:Issuer>
  <samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <samlp:StatusCode  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0" ID="pfx539c9774-de5c-5f52-0c3f-b1c2e2697a89" IssueInstant="2018-01-29T13:02:58Z" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer>idp_entityId</saml:Issuer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="one_of_supported_algo"/>
        <ds:SignatureMethod Algorithm="one_of_supported_algo"/>
        <ds:Reference URI="#pfx539c9774-de5c-5f52-0c3f-b1c2e2697a89">
          <ds:Transforms>
            <ds:Transform Algorithm="one_of_supported_algo"/>
            <ds:Transform Algorithm="one_of_supported_algo"/>
          </ds:Transforms>
          <ds:DigestMethod Algorithm="one_of_supported_algo"/>
          <ds:DigestValue>huywDPPfOEGyyzE7d5hjOG97p7FDdGrjoSfes6RB19g=</ds:DigestValue>
        </ds:Reference>
      </ds:SignedInfo>
 <ds:SignatureValue>BAwNZFgWF2oxD1ux0WPfeHnzL+IWYqGhkM9DD28nI9v8XtPN8tqmIb5y4bomaYknmNpWYn7TgNO2Rn/XOq+N9fTZXO2RybaC49iF+zWibRIcNwFKCCpDL6H6jA5eqJX2YKBR+K6Yt2JPoUIRLmqdgm2lMr4Nwq1KYcSzQ/yoV5W0SN/V5t8EfctFoaXVPdtfHVXkwqHeufo+L4gobFt9NRTzXB0SQEClA1L8hQ+/LhY4l46k1D0c34iWjVLZr+ecQyubf7rekOG/R7DjWCFMTke822dR+eJTPWFsHGSPWCDDHFYqB4QMinTvUnsngjY3AssPqIOjeUxjL3p+GXn8IQ==</ds:SignatureValue>
    </ds:Signature>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">JohnDoe@gmail.com</saml:NameID>
    </saml:Subject>
    <saml:Conditions NotBefore="2018-01-29T12:59:58Z" NotOnOrAfter="2018-01-29T13:05:58Z">
    </saml:Conditions>
</samlp:Response>

Quali tipi di algoritmi sono supportati da App ID?

App ID utilizza l'algoritmo RSA-SHA256 per elaborare le firme digitali XML.

Configurazione dei provider di identità SAML per utilizzare App ID

È possibile configurare i fornitori di identità di SAML per lavorare con App ID fornendo metadati da App ID al proprio fornitore di identità e metadati dal proprio fornitore di identità a App ID.

Fornitura di metadati al tuo provider di identità

Per configurare la tua applicazione, devi fornire informazioni a un provider di identità compatibile con SAML. Le informazioni vengono scambiate tramite un file XML di metadati che contiene inoltre dati di configurazione utilizzati per stabilire l'attendibilità.

È possibile abilitare SAML solo dopo averlo configurato come identity provider.

  1. Nella scheda Manage del dashboard App ID, fai clic su Edit nella riga SAML per configurare le tue impostazioni.

  2. Fai clic su Download SAML Metadata file. Il tuo provider di identità si aspetta le seguenti informazioni dal file.

    Le informazioni contenute nel file dei metadati
    Variabile Descrizione
    EntityID L'identificatore che consente al fornitore di identità di sapere che App ID ha emesso la richiesta SAML.
    Location URL La posizione in cui il provider di identità invia le asserzioni SAML dopo aver autenticato correttamente un utente.
    Binding Le istruzioni su come il fornitore di identità deve inviare la risposta SAML.
    NameID Format Come il fornitore di identità sa quale formato di identificatore deve inviare nell'oggetto di un'asserzione e come App ID identifica gli utenti. L'ID deve assumere il seguente modulo: &lt;saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"&gt;.
    WantAssertionsSigned Il modo in cui un fornitore di identità verifica se deve firmare l'asserzione. Il servizio si aspetta che l'asserzione sia firmata, ma non supporta asserzioni crittografate.
    KeyDescriptor I certificati di firma e di crittografia SAML che possono essere utilizzati per configurare il tuo provider di identità per verificare la richiesta SAML firmata e per crittografare la risposta.
  3. Fornisci i dati al tuo provider di identità. Se il tuo provider di identità supporta il caricamento del file di metadati, puoi farlo. In caso contrario, configura le proprietà manualmente. Non tutti i provider di identità utilizzano le stesse proprietà, quindi potresti non utilizzarle tutte.

    I nomi delle proprietà potrebbero differire tra i provider di identità.

  4. Passa SAML 2.0 Federation a Enabled.

Fornitura di metadati a App ID

Puoi ottenere i dati dal tuo provider di identità e fornirli a App ID. Puoi avviare l'accesso alle tue applicazioni da IBM Cloud o dal tuo provider di identità.

Fornitura di metadati nella console

Per accedere alle tue applicazioni dall'IU IBM Cloud, attieniti alla seguente procedura.

  1. Passa alla scheda SAML 2.0 del dashboard App ID.

  2. Aggiungere il Nome provider. Il nome predefinito è SAML.

  3. Immetti i seguenti metadati che hai ottenuto dal provider di identità nella sezione Provide Metadata from SAML IdP.

    Le informazioni che devono essere fornite a App ID
    Variabile Descrizione
    Sign-in URL L'URL a cui l'utente viene reindirizzato per l'autenticazione. È ospitato dal tuo provider di identità SAML.
    Entity ID Il nome globalmente univoco per un provider di identità SAML.
    Primary certificate Il certificato emesso dal tuo provider di identità SAML. È utilizzato per firmare e convalidare le asserzioni SAML. Tutti i provider sono diversi, ma potresti essere in grado di scaricare il certificato di firma dal tuo provider di identità. Il certificato deve essere in formato .pem.
  4. Facoltativo: fornisci un certificato secondario che viene utilizzato se la convalida della firma non riesce sul certificato primario. Se la chiave di firma rimane la stessa, App ID non blocca l'autenticazione per i certificati scaduti.

  5. Fare clic su Salva.

Vuoi impostare un contesto di autenticazione? Puoi farlo tramite l'API.

Configurazione del login IdP-initiated nella console

Se si desidera accedere alle applicazioni su IBM Cloud dall'interfaccia utente del provider di identità, è possibile attivare il login IdP-initiated.

Seguire i passaggi da 1 a 4 della sezione Fornitura di metadati nella console. Quindi, completare la procedura seguente.

  1. Abilita il login iniziato daIdP.
  2. Inserire il reindirizzamento IdP URL.
  3. Fare clic su Salva.

Fornitura dei metadati con l'API

  1. Visualizzare la configurazione attuale di SAML, compresi il contesto di autenticazione e i certificati, effettuando una richiesta GET all'endpoint /saml API.

    Codice di esempio:

    curl --request GET \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json`
    

    Output di esempio:

    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "authnContext": {
          "class": [
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
          ],
          "comparison": "exact"
       }
       }
    }
    
  2. Crea la tua configurazione SAML sostituendo i valori nel seguente esempio con le informazioni dal tuo provider. I valori indicati nell'esempio sono obbligatori, ma si può scegliere di includere altre informazioni, come indicato nella tabella.

    "config": {
       "authnContext": {
       "class": [
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue",
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourOtherChosenClassValue"
       ],
       "comparison": "sampleComparisonValue"}
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
       "primary-certificate-example-pem-format"
       "secondary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "signRequest": true ,
       "encryptResponse": true
    }
    
    SAML variabili di configurazione
    Variabile Descrizione
    signInUrl L'URL a cui l'utente viene reindirizzato per l'autenticazione. È ospitato dal tuo provider di identità SAML.
    entityID Il nome globalmente univoco per un provider di identità SAML.
    displayName Il nome che assegni alla tua configurazione SAML.
    primary-certificate-example-pem-format Il certificato emesso dal tuo provider di identità SAML. È utilizzato per firmare e convalidare le asserzioni SAML. Tutti i provider sono diversi, ma potresti essere in grado di scaricare il certificato di firma dal tuo provider di identità. Il certificato deve essere in formato .pem.
    Facoltativo: secondary-certificate-example-pem-format Il certificato di backup emesso dal provider di identità SAML. Viene utilizzato se la convalida della firma non riesce con il certificato primario. Nota: Se la chiave di firma rimane la stessa, App ID non blocca l'autenticazione per i certificati scaduti.
    Facoltativo: authnContext Il contesto di autenticazione viene utilizzato per verificare la qualità dell'autenticazione e delle asserzioni SAML. Puoi aggiungere un contesto di autenticazione aggiungendo un array di classi e una stringa di confronto al tuo codice. Assicurati di aggiornare entrambi i parametri class e comparison con i tuoi valori. Ad esempio, un parametro class potrebbe essere simile a urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.
    Facoltativo: signRequest Il flag signRequest consente di inviare una richiesta firmata SAML a un fornitore di identità, firmata utilizzando la chiave privata di firma SAML del tenant. Per configurare il provider di identità SAML in modo che riceva una richiesta firmata, è necessario il certificato di firma dal file di metadati che si può scaricare nel campo KeyDescriptor use="signing". Per impostazione predefinita, la firma della richiesta è impostata su off.
    Facoltativo: encryptResponse Il flag encryptResponse consente di ricevere una risposta criptata dal fornitore di identità come parte della richiesta di autenticazione. Per configurare il provider di identità SAML in modo che invii una risposta criptata, è necessario il certificato di crittografia che si trova nel file dei metadati nel campo KeyDescriptor use="encryption". Per impostazione predefinita, la crittografia della risposta è impostata su off.
  3. Effettuare una richiesta PUT al sito /saml Punto finale API per fornire la configurazione creata al punto 2 a App ID. Consulta il seguente esempio per vedere a cosa può somigliare la tua richiesta.

    curl --request PUT \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json` \
    --data \
    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "primary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       }
    }
    

Configurazione del login IdP-initiated con l'API

Per configurare il login IdP-initiated, completare i seguenti passaggi.

  1. Visualizzare la configurazione attuale di SAML, compresi il contesto di autenticazione e i certificati, effettuando una richiesta GET all'endpoint /saml API.

    Codice di esempio:

    curl --request GET \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json`
    

    Output di esempio:

    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "authnContext": {
          "class": [
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
          ],
          "comparison": "exact"
       }
       }
    }
    
  2. Crea la tua configurazione SAML sostituendo i valori nel seguente esempio con le informazioni dal tuo provider. I valori indicati nell'esempio sono obbligatori, ma si può scegliere di includere altre informazioni, come indicato nella tabella.

    "config": {
       "authnContext": {
       "class": [
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue",
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourOtherChosenClassValue"
       ],
       "comparison": "sampleComparisonValue"
       },
       "idpInitEnabled": true,
       "idpRedirectUrl": "https://example.com/redirect/endpoint",
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
       "primary-certificate-example-pem-format"
       "secondary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "signRequest": true ,
       "encryptResponse": true
    }
    
    SAML variabili di configurazione
    Variabile Descrizione
    signInUrl L'URL a cui l'utente viene reindirizzato per l'autenticazione. È ospitato dal tuo provider di identità SAML.
    entityID Il nome globalmente univoco per un provider di identità SAML.
    displayName Il nome che assegni alla tua configurazione SAML.
    primary-certificate-example-pem-format Il certificato emesso dal tuo provider di identità SAML. È utilizzato per firmare e convalidare le asserzioni SAML. Tutti i provider sono diversi, ma potresti essere in grado di scaricare il certificato di firma dal tuo provider di identità. Il certificato deve essere in formato .pem.
    DefaultRelayState Il valore iniziale per RelayState. Questa variabile è configurata nelle impostazioni del provider di identità. Questa variabile può essere usata per il reindirizzamento URL invece di idpRedirectUrl durante le richieste SAML del fornitore di identità. Se si impostano entrambe le variabili, il valore di DefaultRelayState ha la precedenza. IdP-initiated il login fallisce se non si imposta una di queste variabili.
    idpInitEnabled Un valore booleano per indicare se si desidera abilitare il login avviato da IdP.
    idpRedirectUrl Il valore di questo campo può essere null, una stringa vuota o un redirect http o https valido URL. Nota: se il valore di questo campo è nullo, si deve impostare DefaultRelayState come redirect URL. Se si impostano entrambe le variabili, il valore di DefaultRelayState ha la precedenza. IdP-initiated il login fallisce se non si imposta una di queste variabili.
    Facoltativo: secondary-certificate-example-pem-format Il certificato di backup emesso dal provider di identità SAML. Viene utilizzato se la convalida della firma non riesce con il certificato primario. Nota: Se la chiave di firma rimane la stessa, App ID non blocca l'autenticazione per i certificati scaduti.
    Facoltativo: authnContext Il contesto di autenticazione viene utilizzato per verificare la qualità dell'autenticazione e delle asserzioni SAML. Puoi aggiungere un contesto di autenticazione aggiungendo un array di classi e una stringa di confronto al tuo codice. Assicurati di aggiornare entrambi i parametri class e comparison con i tuoi valori. Ad esempio, un parametro class potrebbe essere simile a urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.
    Facoltativo: signRequest Il flag signRequest consente di inviare una richiesta firmata SAML a un fornitore di identità, firmata utilizzando la chiave privata di firma SAML del tenant. Per configurare il provider di identità SAML in modo che riceva una richiesta firmata, è necessario il certificato di firma dal file di metadati che si può scaricare nel campo KeyDescriptor use="signing". Per impostazione predefinita, la firma della richiesta è impostata su off.
    Facoltativo: encryptResponse Il flag encryptResponse consente di ricevere una risposta criptata dal fornitore di identità come parte della richiesta di autenticazione. Per configurare il provider di identità SAML in modo che invii una risposta criptata, è necessario il certificato di crittografia che si trova nel file dei metadati nel campo KeyDescriptor use="encryption". Per impostazione predefinita, la crittografia della risposta è impostata su off.
  3. Effettuare una richiesta PUT al sito /saml Punto finale API per fornire la configurazione creata al punto 2 a App ID. Consulta il seguente esempio per vedere a cosa può somigliare la tua richiesta.

    curl --request PUT \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json` \
    --data \
       {
         "isActive": true,
         "config": {
             "entityID": "https://example.com/saml2/metadata/706634",
             "signInUrl": "https://example.com/saml2/sso-redirect/706634",
             "certificates": [
             "certificate-example-pem-format"
             ],
             "displayName": "my saml example",
             "authnContext": {
                 "class": [
                     "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
                 ],
             "comparison": "exact"
             },
             "idpInitEnabled": true,
             "idpRedirectUrl": "https://example.com/redirect/endpoint",
         }
    }
    

Verifica della configurazione

Puoi verificare la configurazione tra il tuo provider di identità SAML e App ID.

  1. Assicurarsi di aver salvato la configurazione.
  2. Passa alla scheda SAML 2.0 del dashboard App ID e fai clic su Test. Si apre una nuova scheda.
  3. Accedere con un utente già autenticato dal provider di identità.
  4. Dopo aver completato il modulo, verrai reindirizzato a un'altra pagina.
    • Autenticazione riuscita: la connessione tra App ID e il provider di identità funziona correttamente. La pagina visualizza token di accesso e identità validi.
    • Autenticazione non riuscita: la connessione viene interrotta. La pagina visualizza gli errori e il file XML di risposta SAML.

Il framework SAML supporta più profili, flussi e configurazioni, il che significa che il provider di identità deve essere configurato correttamente. Se si riscontrano dei problemi, verificare alcuni motivi comuni per cui la richiesta di autenticazione potrebbe fallire o consultare le specifiche di SAML per i codici di errore dettagliati.