【问题标题】: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示例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 2019-11-01
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多