Autenticazione per il richiamo REST e SOAP

Il portale cloud supporta l'utilizzo dell'autenticazione di base nel richiamo delle API REST e SOAP. Invece di codificare le credenziali di accesso nella propria applicazione, estrarle da un file separato.

La pratica consigliata per l'utilizzo delle credenziali di accesso è conservarle in un file separato, e chiamarle dalla propria applicazione durante l'autenticazione. Con questo approccio non è necessario alterare il codice della propria applicazione ogni volta che si modificano le proprie credenziali. L'alternativa principale è quella di aggiungere le credenziali direttamente alla propria applicazione. Questo approccio rischia l'introduzione di errori al proprio codice e richiede di ridistribuire l'applicazione ogni volta che si aggiorna le credenziali.

Il portale cloud offre due tipi di credenziali:

  • Credenziali di servizio: Queste credenziali sono esenti dalle politiche di rinnovo della password del portale cloud. Sono validi solo per richiamare le API REST e SOAP. Gli utenti non possono utilizzarli per accedere al portale o ai suoi componenti.
    Nota: Operational Decision Manager on Cloud supporta SOAP 1.1. Non supporta versioni successive di SOAP.
  • Account locali: questi account utente dispongono di credenziali soggette alle politiche di rinnovo della password del portale cloud. Gli utenti e le applicazioni possono utilizzare queste credenziali per accedere al portale e ai suoi componenti.
Suggerimento:

Utilizzare le credenziali di servizio per l'autenticazione delle applicazioni. Garantiscono una maggiore sicurezza e puoi applicare le tue politiche per l'aggiornamento delle credenziali di accesso.

Utenti SAML

Non è possibile utilizzare le credenziali di accesso SAML per autenticare un servizio di decisione. Se si utilizza SAML per accedere al portale cloud, è necessario richiedere le credenziali di servizio per il richiamo REST o SOAP. Gli utenti interni IBM® utilizzano automaticamente SAML per accedere al portale e devono richiedere le credenziali del servizio.

Chiamata delle credenziali di servizio

I seguenti passaggi mostrano come impostare la propria applicazione per richiamare le credenziali di servizio da un file separato. A seconda della propria strategia IT, è possibile utilizzare le credenziali di un account locale al posto delle credenziali di servizio.

  1. Ottenere le credenziali di servizio dal proprio amministratore cloud. Solo un amministratore cloud può generare credenziali di servizio. Le credenziali di servizio includono un ID funzionale e una password.
  2. Inserisci le credenziali del servizio in un file delle proprietà, ad esempio sc.properties:
    odmoc.url=https://mytenant.bpm.ibmcloud.com/odm/dev
    odmoc.functionalId=api1.fid@t1023
    odmoc.password=xfmptNJsQONCvRXB1bYS1AxlIcYyh1UR2y/LMpyx

    Le proprietà in questo esempio sono definite come segue:

    Proprietà Descrizione
    odmoc.url L' URL del proprio tenant del portale cloud
    odmoc.functionalId L'ID funzionale nelle credenziali di servizio
    odmoc.password La password nelle credenziali di servizio
  3. Nella tua applicazione, aggiungi il codice che richiama le credenziali del servizio dal file sc.properties. Il seguente codice è da un client Java™ :
    package test;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.util.Properties;
    
    import org.apache.commons.codec.binary.Base64;
    import org.apache.http.HttpResponse;
    import org.apache.http.Header;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.ssl.SSLContextBuilder;
    import org.apache.http.util.EntityUtils;
    
    import com.ibm.json.java.JSONObject;
    
    public class OdmRestClient {
        
        public static void main(String[] args) throws Exception {
    	// The builder should be configured to connect using HTTPS to ODM on Cloud,
    	// and must use a secure cipher with hostname verification. The following
    	// code does not reflect all the required settings.
            HttpClientBuilder builder = HttpClients.custom();
            builder.disableRedirectHandling();
            HttpClient client = builder.build();
    
            // This code calls the service credentials from the file sc.properties. 
            //It reads the url, functional Id and password from a property file.
            String configFile = "sc.properties";
            FileInputStream fistream = null;
            try {
                fistream = new FileInputStream(configFile);
            }
            catch (FileNotFoundException e) {
                System.out.println("Could not open file: " + configFile);
                System.exit(0);
            }
            Properties props = new Properties();
            props.load(fistream);
    
    	String baseurl = props.getProperty("odmoc.url");
            String fid = props.getProperty("odmoc.functionalId");
            String pwd = props.getProperty("odmoc.password");
    	String url = baseurl + "/res/api/v1/ruleapps?count=true";
    	
            // Basic Authentication header value
            String baHeader = fid + ":" + pwd;
    	System.out.println("BA header is: " + baHeader);
            baHeader = Base64.encodeBase64String(baHeader.getBytes());
            
            // execute request
            HttpResponse response = null;
    	System.out.println("** Calling: " + url);
    
            HttpGet request = new HttpGet(url);
            request.setHeader("Authorization", "Basic " + baHeader);                        
            try {
               response = client.execute(request);
            }
            catch (Exception e) {
               throw new Exception("Could not execute API call, reason: " + e.getMessage());
            }
            
            int httpRespCode = response.getStatusLine().getStatusCode();
    	System.out.println("Response code is: " + httpRespCode);
    
            if (httpRespCode==302) {
                // We are in one of these 3 cases: wrong ID, wrong password, account locked
                System.out.println("Basic auth access denied.");
    	    System.out.println("Reason1: Wrong ID or password");
    	    System.out.println("Reason2: Account locked after some unsuccessful attempts");
            }                        
            else if (httpRespCode==401) {
    	    // Aithorization is not granted to access the URL
                System.out.println("ODM API access was denied: you are not authorized");
            }
            else if (httpRespCode==200){                    
    	    // Correct execution result, extract the HTTP response
                String json = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("Successful invocation, result : " + json);
            }
    	else {
    	    // Diagnose why such a code. Contact IBM support with all the details.
    	    System.out.println("Unexpected return code: " + httpRespCode);
    	}
        }
    }

Il lato client HTTP può restituire i seguenti codici durante l'autenticazione:

Codice Descrizione
Code 200 Questo codice denota un risultato di esecuzione corretto. Il risultato di ritorno è la risposta effettiva alla chiamata API. È possibile ottenere il Codice 200 in caso di credenziali errate quando la gestione del redirect non viene disattivata. Per diagnosticare con precisione un problema di connessione, disattivare la gestione del redirect.
Code 302 La richiesta HTTP restituisce il codice 302 quando l'ID funzionale o la password sono errati o l'account è bloccato. Il codice non fornisce la causa dell'errore di autenticazione. Se l'account è bloccato, è possibile provare ad aspettare un'ora per l'account da sbloccare automaticamente. Se l'account non viene sbloccato automaticamente, contattare l'amministratore del cloud. Questo codice viene restituito quando la gestione del redirect viene disattivata
Code 401 Si ottiene questo codice quando le credenziali sono corrette, ma non sono autorizzate ad accedere all' URL. È necessario chiedere al responsabile del cloud di concedere l'autorizzazione richiesta. (Nota: Questo codice non è attualmente restituito ma l'autorizzazione potrebbe essere potenziata in futuro).
Altri codici Se si ottiene qualsiasi altro codice, contattare IBM per l'assistenza (vedi Risoluzione e supporto).