Example in Java
From version 4.0 the recommended authentication method is JWT and not the URL signing described below
Example of how to sign a request in Java
This example refrences org.apache.commons.lang3 which needs to be included. (Can be downloaded at http://commons.apache.org/lang/)
Java
import java.util.*; import java.text.*; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.net.URLEncoder; import java.net.URLDecoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; class MeridixSignature { public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException { String token = "gf94bfdds9bd4b8885466baa8dsc28"; System.out.printf("Token:\n%s\n", token); String secret = "56fhu73df434a8"; System.out.printf("Secret:\n%s\n", secret); String request = "http://site.meridix.se/api/customer/listcustomers"; System.out.printf("Request:\n%s\n", request); String nonce = UUID.randomUUID().toString().substring(0, 8); System.out.printf("Nonce:\n%s\n", nonce); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); String timestamp = dateFormat.format(new Date()); System.out.printf("Timestamp:\n%s\n", timestamp); List<String> parameters = new ArrayList<String>(); parameters.add("auth_nonce=" + nonce); parameters.add("auth_timestamp=" + timestamp); parameters.add("auth_token=" + token); Collections.sort(parameters); String parametersConcated = org.apache.commons.lang3.StringUtils.join(parameters, "&"); System.out.printf("ParametersConcated:\n%s\n", parametersConcated); String parametersConcatedEncoded = URLEncoder.encode(parametersConcated, "UTF-8"); System.out.printf("ParametersConcatedEncoded:\n%s\n", parametersConcatedEncoded); String requestEncoded = URLEncoder.encode(request, "UTF-8"); System.out.printf("RequestEncoded:\n%s\n", requestEncoded); // IMPORTANT - The GET&-prefix must be change to POST& etc. when using different HTTP Verbs than GET. String verbRequestQuery = "GET&" + requestEncoded + "&" + parametersConcatedEncoded + "&" + secret; System.out.printf("VerbRequestQuery:\n%s\n", verbRequestQuery); String signature = generateMD5Hash(verbRequestQuery); System.out.printf("Signature:\n%s\n", signature); String signedRequest = request + "?" + parametersConcated + "&auth_signature=" + signature; System.out.printf("SignedRequest:\n%s\n", signedRequest); } public static String pad(String s, int length, char pad) { StringBuffer buffer = new StringBuffer(s); while (buffer.length() < length) { buffer.insert(0, pad); } return buffer.toString(); } public static String generateMD5Hash(String input) throws NoSuchAlgorithmException, UnsupportedEncodingException { MessageDigest digester = MessageDigest.getInstance("MD5"); digester.update(input.getBytes("UTF-8")); return pad((new BigInteger(1,digester.digest())).toString(16),32,'0'); } }
Webpage: www.meridix.se
Email: support@meridix.se
Tel: +46 (0) 21 38 30 32