Autenticazione per il richiamo REST e SOAP
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.
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.
- 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.
- 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/LMpyxLe proprietà in questo esempio sono definite come segue:
Proprietà Descrizione odmoc.urlL' URL del proprio tenant del portale cloud odmoc.functionalIdL'ID funzionale nelle credenziali di servizio odmoc.passwordLa password nelle credenziali di servizio - 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). |