【问题标题】:How to create OAuth HMAC-SHA1 signature on GAE/J?如何在 GAE/J 上创建 OAuth HMAC-SHA1 签名?
【发布时间】:2011-03-29 20:31:16
【问题描述】:
编辑:java equivalent to php's hmac-SHA1
(希望,尝试 a.t.m.)
我的理解是,要创建签名,我需要一个“基本字符串”和一个“密钥”。我想我知道如何创建基本字符串,并且我假设我应该使用 Google 分配给我的应用程序的“OAuth Consumer Secret”作为密钥。
但是我应该如何处理这两个来获得签名? GAE/Java 上是否有任何 HMAC 类?
如果我只是将OAuth Playground 为我生成的内容存储在某个地方,它会播放吗?是你怎么做的吗?或者 OAuth 签名是否有过期日期?
(我之前尝试过 AuthSub 但failed too,尽管它看起来很简单。而且 OAuth 对我来说似乎更“标准”,所以我想坚持使用 OAuth。)
【问题讨论】:
标签:
java
google-app-engine
oauth
hmac
【解决方案1】:
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);
}
【解决方案2】:
出于某种原因,Quercus 和 GAE 上的 hmac_init 会出错。一种解决方案是使用上述 java 方法和类,将其导入 PHP 实例并调用计算。
1) 添加你还没有的 scr/phpgae 目录 id
2) 将 phpgae.HmacSHA256 行添加到 src/WEB-INF/services/com.caucho.QuercusModule
3) 将 scr/phpgae/HmacSHA256.java 添加到您的 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);
}
}
请注意,我在这里使用的是 SHA256。 Eclipse 会即时编译所有内容,否则您需要手动编译类。
4) 在 PHP 上,您可以这样做:
<?php
import phpgae.HmacSHA256;
$c = new HmacSHA256;
echo $c->compute( 'your base string' , 'your key' );
?>
您可以从http://php-apps.appspot.com/找到更多实用的PHP on Google App Engine示例