【问题标题】:WSSE timestamp generation in AndroidAndroid 中的 WSSE 时间戳生成
【发布时间】:2014-03-25 09:10:12
【问题描述】:

我有一个带有 WSSE 身份验证的 Web 服务。 Web 服务是用 Symfony2 编写的,我可以通过 PHP 客户端访问它,也可以使用名为 REST Console 的 chrome 插件访问它,所以它可以工作。为了手动生成标题,我使用了this wsse generator。

为了制作 Android 客户端,我遵循了这个 tutorial,它可以工作,但只有在它不生成时间戳时才有效。

生成时间戳的代码是:

private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
...
private String generateTimestamp() {
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    return sdf.format(new Date());
}

它返回的字符串是正确的,格式和一切看起来都很完美,但它告诉“未授权”,但是当我像这样直接编写时间戳时它可以工作:

private String generateTimestamp() {
    return "2014-03-25T09:00:26Z";
}

我已经检查了编码,尝试像 UTF-8 和 Cp-1252(文件编码)一样对其进行编码:

private String generateTimestamp() {
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String hora = sdf.format(new Date());

    String correctString = "fail";
    try {
        correctString = new String(hora.getBytes(), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    correctString.hashCode();
    //String buena = "2014-03-25T08:10:59Z";
    return correctString ;
}

我使用 Calendar.YEAR + Calendar.MONTH.... 生成了时间戳,但仍然不起作用。

目前我正在尝试在真机上对其进行测试,但我认为这不是模拟器问题。

你有什么建议吗?非常感谢您!

【问题讨论】:

    标签: android timestamp wsse


    【解决方案1】:

    有效的解决方案是:

    private String generateTimestamp() {
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        String hora = sdf.format(new Date());
    
        return "\""+hora+"\"";
    }
    

    问题是Android发送给webservice的最后一个String有两个像这样的双引号:

    X-WSSE: UsernameToken Username="esther", PasswordDigest="FgWu9GAKkbmsc52fZHu3VINHlKw=", Nonce="OWVkNDMxMWY2OGE4MTZjOQ==", Created=""2014-03-25T09:00:26Z""
    

    但它确实有效,即使它不是最好的解决方案。

    我认为 Java/Android/SimpleDateFormat 生成字符串的方式不同,但是...

    我已经测试过尝试连接空字符串,但它仍然不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 2010-11-15
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多