WSSE en android (java)

Publié le par samuel

SensioLabs propose via un Cookbook une authentification wsse pour les API. Dans cette méthode le cryptage du mot de passe est essentiel car il garantie la sécurité.

Dans ce cookbook, la méthode de cryptage utilise deux fonctions native de php sha1 et base64 encode. Très simple à utiliser en php ils le sont beaucoup moins en java.

Je vous propose donc une fonction de génération wsse répondant au cryptage php suivant :

base64_encode(sha1($nonce.$created.$secret));

Il y a donc deux passes de cryptage, le sha1 puis le base64 encode.

private String encryptWsse()
{
    String username =  "my_user";
    String password = "my_password";
    String digest = "";
    String nonce = "";
    String createdAt = "";

    /** Date */
    Date date = new Date();
    TimeZone gmtTZ = TimeZone.getTimeZone("GMT");
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz", Locale.FRENCH);
    dateFormat.setTimeZone(gmtTZ);
    createdAt = dateFormat.format(date);

    try
    {
        // Nonce
        nonce = UUID.randomUUID().toString();
        // Digest
        // Passage SHA-1
        MessageDigest crypt = MessageDigest.getInstance("SHA-1");
        crypt.reset();
        crypt.update((nonce+createdAt+password).getBytes());
        // Transformation en Hex
        digest = byteToHex(crypt.digest());
        // Passage Base64 encode -  Flag = 2 pour supprimer les \n
        byte[] tmp = Base64.encode(digest.getBytes(),2);
        // Transformation final byte[] -> String
        digest = new String(tmp);
    }
    catch(NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }

    return digest;
}

/**
* Transformation byte[] to Hexadecimal
*/
private static String byteToHex(final byte[] hash)
{
    Formatter formatter = new Formatter();
    for (byte b : hash)
    {
        formatter.format("%02x", b);
    }
    String result = formatter.toString();
    formatter.close();
    return result;
}

J’espère que cette petite fonction vous aidera dans vos appels API Symfony2.

Cette entrée a été publiée dans Symfony 2 API, Symfony 2 Utils, avec comme mot(s)-clef(s) , , , , . Vous pouvez la mettre en favoris avec ce permalien.



Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


- two = 7

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>