Autenticação para Chamada REST e SOAP
A prática recomendada para o uso de credenciais de login é mantê-las em um arquivo separado, e chamá-las de sua aplicação durante a autenticação. Com essa abordagem, você não tem que alterar o código de sua aplicação toda vez que alterar suas credenciais. A alternativa primária é adicionar as credenciais diretamente ao seu aplicativo. Esta abordagem arrisque a introdução de erros ao seu código, e requer que você reimplemente o aplicativo toda vez que atualizar as credenciais.
O portal da nuvem oferece dois tipos de credenciais:
- Credenciais de serviço: Estas credenciais estão isentas das polias de renovação de senha do portal da nuvem. Eles são válidos apenas para chamar APIs REST e SOAP. Os usuários não podem utilizá-los para fazer login no portal ou em seus componentes.Nota: Operational Decision Manager on Cloud suporta SOAP 1.1. Ele não suporta versões posteriores de SOAP..
- Contas locais: essas contas de usuários possuem credenciais que estão sujeitas às políticas de renovação de senha do portal da nuvem. Usuários e aplicativos podem usar essas credenciais para fazer login no portal e em seus componentes.
Use credenciais de serviço para autenticar suas aplicações. Eles fornecem melhor segurança, e você pode aplicar suas próprias políticas para atualização de credenciais de login.
Usuários do SAML
Não é possível utilizar credenciais de login do SAML para autenticar um serviço de decisão. Se você usar o SAML para fazer login no portal da nuvem, você deve solicitar credenciais de serviço para chamada REST ou SOAP. Os usuários internos do IBM® automaticamente utilizam o SAML para efetuar login no portal e devem solicitar credenciais de serviço.
Chamando credenciais de serviço
As etapas a seguir mostram como configurar o seu aplicativo para chamar credenciais de serviço a partir de um arquivo separado. Dependendo da sua estratégia de TI, você pode usar as credenciais de uma conta local no lugar das credenciais de serviço.
- Obtenha suas credenciais de serviço a partir de seu administrador de cloud. Apenas um administrador de nuvem pode gerar credenciais de serviço. As credenciais de serviço incluem um ID funcional e uma senha.
- Coloque as credenciais de serviço em um arquivo de propriedade, por exemplo, sc.properties:
odmoc.url=https://mytenant.bpm.ibmcloud.com/odm/dev odmoc.functionalId=api1.fid@t1023 odmoc.password=xfmptNJsQONCvRXB1bYS1AxlIcYyh1UR2y/LMpyxAs propriedades neste exemplo são definidas da seguinte forma:
Propriedade Descrição odmoc.urlA URL do seu locatário do portal da nuvem odmoc.functionalIdO ID funcional nas credenciais de serviço odmoc.passwordA senha nas credenciais de serviço - Em seu aplicativo, inclua o código que chama as credenciais de serviço do arquivo sc.properties. O código a seguir é de um cliente 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); } } }
O lado do cliente HTTP pode retornar os seguintes códigos durante a autenticação:
| Código | Descrição |
|---|---|
Code 200 |
Este código denota um resultado de execução correto. O resultado do retorno é a resposta real para a chamada API. Você pode obter o Código 200 no caso de credenciais erradas quando a manipulação de redirecionamento não for desativada. Para diagnosticar um problema de conexão com precisão, desative o manuseio de redirecionamento. |
Code 302 |
A solicitação HTTP retorna o código 302 quando a ID funcional ou a senha está incorreta ou a conta está bloqueada. O código não fornece a causa da falha de autenticação. Se a conta estiver bloqueada, você pode tentar esperar uma hora para que a conta seja desbloqueada automaticamente. Se a conta não for desbloqueada automaticamente, entre em contato com o administrador da nuvem. Este código é retornado quando a manipulação de redirecionamento é desativada |
Code 401 |
Você recebe esse código quando as credenciais estão corretas, mas não estão autorizadas a acessar o URL. Você deve pedir ao seu administrador de cloud para conceder a autorização necessária. (Nota: Este código não é retornado atualmente mas a autorização poderia ser aprimorada no futuro.) |
| Outros códigos | Se você obter qualquer outro código, entre em contato IBM para assistência (consulte Resolução de Problemas e Suporte). |