Я использую symfony2 для веб-сервера и использую wsse-аутентификацию с заголовком x-wsse.Как выполнить реализацию аутентификации WSSE в javascript в соответствии с php-частью в веб-сервере?
Вопрос в том, какие именно функции я должен использовать в Java, чтобы дать тот же результат, что и в PHP.
PHP часть для генерации заголовка:
$nonce = substr(md5(uniqid('nonce_', true)), 0, 16);
$nonceHigh = base64_encode($nonce);
$passwordDigest = base64_encode(sha1($nonce . $created . $password . "{" . $user->getSalt() . "}", true));
$header = "UsernameToken Username=\"{$username}\", PasswordDigest=\"{$passwordDigest}\", Nonce=\"{$nonceHigh}\", Created=\"{$created}\"";
PHP часть для заголовка проверить:
$expected = base64_encode(sha1(base64_decode($nonce) . $created . $secret, true));
Я не знаю, почему он использует nonceHigh вместо одноразового номера напрямую? Я считаю, что это вызывает проблему в java. И я также не знаю, должен ли генерировать nonce или использовать один генерировать с сервера. Чтобы сделать сравнение, я повторно использовал nonce от сервера для создания дайджеста.
byte [] nonceLow = Base64.decode(nonceHigh, Base64.DEFAULT); // nonceHigh is from above
String nonce = String.valueOf(nonceLow); // this give strange result. is it wrong?
String temp = nonce + format(now) + password;
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
//new String(Base64.encodeBase64(md.digest(temp.getBytes())));
digest = Base64.encodeToString(md.digest(temp.getBytes("UTF-8")), Base64.DEFAULT);
} catch (Exception e) {
throw new AuthenticationException(e.getMessage(), e);
}
String wsse =
"UsernameToken Username=\"" + username
+ "\", "
+ "PasswordDigest=\""
+ digest
+ "\", "
+ "Nonce=\""
+ nonceHIGH
+ "\", "
+ "Created=\""
+ format(now)
+ "\"";
Вопрос:
- Почему PHP использует nonceHight вместо нонса?
- android java
Base64.encodeToString() == php base64_encode()
? - android java
Base64.decode() == php base64_decode()
?
Можете ли вы рассказать мне, как вы создали метку времени? Каков формат метода? У меня есть эта проблема: http://stackoverflow.com/questions/22629847/wsse-timestamp-generation-in-android, вы можете мне помочь? Спасибо!! – NewRehtse