2010-08-14 21 views
1

EDIT: java equivalent to php's hmac-SHA1
(bien je l'espère, en essayant a.t.m.)Comment créer une signature OAuth HMAC-SHA1 sur GAE/J?

Ma compréhension est que pour créer une signature dont j'ai besoin d'une 'chaîne de base' et une 'clé'. Je suppose que je sais comment créer la chaîne de base, et je suppose que je suis censé utiliser 'OAuth Consumer Secret' que Google a assigné à mon application en tant que clé.

Mais que dois-je faire avec ces deux pour obtenir la signature? Y a-t-il une classe HMAC sur GAE/Java?

Est-ce que ça jouerait si je stockais quelque part ce que OAuth Playground génère pour moi? Est-ce comme ça que vous le faites? Ou la signature OAuth a-t-elle une date d'expiration?

(j'ai essayé AuthSub avant, mais failed too, même si elle semble assez simple. De plus OAuth semble plus « standard » pour moi, donc je voudrais rester avec OAuth.)

Répondre

2
public String computeHmac(String baseString, String key) 
    throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException 
{ 
    Mac mac = Mac.getInstance("HmacSHA1"); 
    SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm()); 
    mac.init(secret); 
    byte[] digest = mac.doFinal(baseString.getBytes()); 
    return Base64.encode(digest); 
} 
0

Pour certains raison hmac_init sur Quercus et GAE donne des erreurs. Une solution consiste à utiliser la méthode et la classe java mentionnées ci-dessus, à l'importer dans l'instance PHP et à appeler le calcul.

1) Ajouter scr/id répertoire phpgae vous n'avez pas encore 2) Ajouter une ligne phpgae.HmacSHA256 src/WEB-INF/services/com.caucho.QuercusModule 3) Ajouter scr/phpgae/HmacSHA256.java à votre application GAE:

package phpgae;

import java.security.InvalidKeyException; 

import java.security.NoSuchAlgorithmException; 

import javax.crypto.Mac; 

import javax.crypto.spec.SecretKeySpec; 

import com.caucho.util.Base64; 

import com.caucho.quercus.module.AbstractQuercusModule; 

public class HmacSHA256 extends AbstractQuercusModule { 

    public String compute(String baseString, String key) throws InvalidKeyException, NoSuchAlgorithmException { 
     Mac mac; 
     mac = Mac.getInstance("HmacSHA256"); 
     SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm()); 
     mac.init(secret); 
     byte[] digest = mac.doFinal(baseString.getBytes()); 
     return Base64.encode(digest); 
    } 
} 

Remarque J'utilise SHA256 ici. Eclipse compile tout à la volée, sinon vous devez compléter la classe manuellement.

4) Le PHP est ici ce que vous faites:

<?php 

import phpgae.HmacSHA256; 

$c = new HmacSHA256; 

echo $c->compute('your base string' , 'your key'); 

?> 

Vous pouvez trouver plus PHP on Google App Engine pratiques exemples: http://php-apps.appspot.com/