Как создать подпись OAuth HMAC-SHA1 на GAE / J? - PullRequest
1 голос
/ 14 августа 2010

РЕДАКТИРОВАТЬ: Java-эквивалент PHP-hmac-SHA1
(хорошо, надеюсь, atm)

Насколько я понимаю, для создания подписи мне нужна "базовая строка"ключ'.Я предполагаю, что знаю, как создать базовую строку, и я предполагаю, что должен использовать «OAuth Consumer Secret», который Google назначил моему приложению в качестве ключа.

Но что я должен делать сэти двое, чтобы получить подпись?Есть ли какой-нибудь класс HMAC в GAE / Java?

Будет ли он воспроизводиться, если я просто сохраню где-нибудь, что OAuth Playground сгенерирует для меня?Это как ты это делаешь?Или у подписи OAuth есть дата истечения срока действия?

(я пробовал AuthSub раньше, но тоже не удался , хотя это выглядит довольно просто. Также OAuth мне кажется более «стандартным», поэтомухотелось бы придерживаться OAuth.)

Ответы [ 2 ]

2 голосов
/ 15 августа 2010
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 голосов
/ 04 февраля 2011

По какой-то причине hmac_init на Quercus и GAE выдает ошибки. Одним из решений является использование вышеупомянутого java-метода и класса, импорт его в экземпляр PHP и вызов вычисления.

1) Добавьте идентификатор каталога scr / phpgae, которого у вас еще нет 2) Добавьте строку phpgae.HmacSHA256 в src / WEB-INF / services / com.caucho.QuercusModule 3) Добавьте scr / phpgae / HmacSHA256.java в ваше приложение GAE:

package phpgae;</p> <pre><code>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); } }

Обратите внимание, я использую SHA256 здесь. Eclipse компилирует все на лету, иначе вам нужно скомпилировать класс вручную.

4) Вот что вы делаете на PHP:

</p> <pre><code><?php import phpgae.HmacSHA256; $c = new HmacSHA256; echo $c->compute( 'your base string' , 'your key' ); ?>

Вы можете найти более практичный PHP на Google App Engine примеры из: http://php -apps.appspot.com /

...