【问题标题】:parsing signed_request in facebook在 facebook 中解析signed_request
【发布时间】:2013-04-08 06:33:08
【问题描述】:

我正在尝试在 32 位操作系统中解析 facebook signed_request。 在 64 位操作系统中解析 signed_request 的 java 代码工作正常。 当我在 32 位操作系统中使用修改后的代码时, 它给出了以下错误'位置 0 处的意外字符 (£)'。 请帮我确定问题。

if (request.getParameter("signed_request") != null)
{
    signed_request  =   request.getParameter("signed_request");
    //out.print("<br>signed_request: "+signed_request);
    try
    {
        System.out.println("signed_request"+signed_request);
        System.out.println("signed_request1");
        fb_data = parse_signed_request(signed_request, secretKey);
    }
    catch(Exception e)
    {
        System.out.println("error"+e);
    }
}





  public static Map parse_signed_request(String input, String secret) throws Exception {
    return parse_signed_request(input, secret, 3600);
  }

  public static Map parse_signed_request(String input, String secret, int max_age) throws Exception {
    String[] split = input.split("[.]", 2);

    String encoded_sig = split[0];
    String encoded_envelope = split[1];
    JSONParser parser = new JSONParser();
    Map envelope = (Map) parser.parse(new String(base32_url_decode(encoded_envelope)));

    String algorithm = (String) envelope.get("algorithm");

    if (!algorithm.equals("HMAC-SHA256")) {
      throw new Exception("Invalid request. (Unsupported algorithm.)");
    }

    if (((Long) envelope.get("issued_at")) < System.currentTimeMillis() / 1000 - max_age) {
      throw new Exception("Invalid request. (Too old.)");
    }

    byte[] key = secret.getBytes();
    SecretKey hmacKey = new SecretKeySpec(key, "HMACSHA256");
    Mac mac = Mac.getInstance("HMACSHA256");
    mac.init(hmacKey);
    byte[] digest = mac.doFinal(encoded_envelope.getBytes());

    if (!Arrays.equals(base32_url_decode(encoded_sig), digest)) {
      throw new Exception("Invalid request. (Invalid signature.)");
    }

    return envelope;
  }

【问题讨论】:

  • 所以你把应该解码base64编码数据的方法的名字改成了base32_url_decode?那没有意义; base64中的“64”与操作系统的架构没有任何关系。

标签: java facebook jsp


【解决方案1】:

使用base64 方法解码JSON 对象。无需将其修改为base32,因为它与操作系统没有关联。架构。

纠正缺陷:

Map envelope = (Map) parser.parse(new String(base64_url_decode(encoded_envelope)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多