gpt4 book ai didi

java - Shopify oauth 中的 HMAC-SHA256 问题(输出不匹配)

转载 作者:行者123 更新时间:2023-11-30 03:16:01 26 4
gpt4 key购买 nike

我正在尝试按照 this 在 Shopify 市场上发布应用程序文档。我陷入了 oauth 文档的第 3 步,其中您必须执行“HMAC 签名验证”。

文档指出您必须使用应用程序的共享 key 通过 HMAC-SHA256 处理字符串(在下面指定)。

String = "shop=some-shop.myshopify.com&timestamp=1337178173"

我正在尝试使用 Java 来实现这些步骤。以下是我使用的代码要点。

        private static final String HMAC_ALGORITHM = "HmacSHA256";
String key = "hush";
String data = "shop=some-shop.myshopify.com&timestamp=1337178173";
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(),HMAC_ALGORITHM);
Mac mac = Mac.getInstance(HMAC_ALGORITHM);
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(data.getBytes());
System.out.println(Hex.encodeHexString(rawHmac));

代码生成以下字符串:

c2812f39f84c32c2edaded339a1388abc9829babf351b684ab797f04cd94d4c7

通过在 Shopify 开发者论坛上的一些随机搜索,我发现了指向 question 的链接。 .

来自 @Shayne 的最后一条消息建议我们必须通过添加 protocol 字段来更改 data 变量。

但是没有成功:(

谁能告诉我应该做什么?我是否必须修改我的代码或文档中的流程已更改。请帮忙。

最佳答案

这是验证 Shopify HMAC 所需的 java 代码。协议(protocol)参数不是必需的,除非它位于 Shopify 的结果中,而这不是我提供的。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String HMAC_ALGORITHM = "HmacSHA256";
resp.setContentType("text/html;charset=UTF-8");
Map<String,String[]> parameters = req.getParameterMap();
String data = null;
SortedSet<String> keys = new TreeSet<String>(parameters.keySet());
for (String key : keys) {
if (!key.equals("hmac")&&!key.equals("signature")){
if (data == null){
data = key + "=" +req.getParameter(key);
}
else {
data = data + "&" + key + "=" + req.getParameter(key);
}
}
}
SecretKeySpec keySpec = new SecretKeySpec(SHARED_KEY.getBytes(),HMAC_ALGORITHM);
Mac mac = null;
try {
mac = Mac.getInstance(HMAC_ALGORITHM);
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(data.getBytes());
if (Hex.encodeHexString(rawHmac).equals(req.getParameter("hmac"))){
//THE HMAC IS VERIFIED
} else {
//THE HMAC IS NOT VERIFIED
}
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
}
}

有趣的是,data中的时间戳参数变成了

×tamp=1459537704

而不是

&timestamp=1459537704

关于java - Shopify oauth 中的 HMAC-SHA256 问题(输出不匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32565052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com