Как сгенерировать сиг OpenID 1.1 на основе assoc_handle?
Я реализовал OpenID 1.1 провайдера в Java, но у меня проблемы с умными клиентами, использующими assoc_handle
от associate
придумывать разные подписи. Тупые клиенты, полагающиеся на check_authentication
отлично работает В частности, я тестирую LiveJournal, и он продолжает возвращаться:
signature_mismatch: предыдущая ассоциация аннулировала ответ провайдера идентификатора.
Тело моего HMAC()
функция:
public static byte[] HMAC(byte[] secret, String token_contents) {
SecretKey sk = new SecretKeySpec(secret, "HMACSHA1");
Mac m = Mac.getInstance(sk.getAlgorithm());
m.init(sk);
return m.doFinal(token_contents.getBytes("UTF-8"));
}
token_contents
для вызова HMAC()
происходит из следующего кода во время обработки для checkid_setup
, То есть подписание делается на mode,identity,return_to
и это также ценность signed
параметр ответа.
String token_contents = String.format(
"mode:id_res\nidentity:%s\nreturn_to:%s\n",
identity, return_to);
И, наконец, secret
это base64-декодированная версия mac_key
возвращается начальным associate
вызов (например, получен через secret(assoc_handle)
согласно спецификации). Я сделал достаточное количество испытаний, чтобы убедиться, enc_mac_key
может быть расшифрован правильно.
Какие-нибудь мысли? Что-то явно не так с этим?
Или... есть простой, автономный клиент, о котором любой знает, который будет делать OpenID 1.1 и отслеживать его шаги. Учитывая, что я могу выяснить, где я по-другому рассчитываю.
1 ответ
Проблема в моем случае заключалась в использовании кодировки base64url для вывода значений ключей (mac_key
, enc_mac_key
, dh_server_public
) вместо стандартного base64. В Apache Commons я использовал encodeBase64URLSafeString
вместо просто encodeBase64String
, Это была неудачная перемена из-за того, что я раньше работал в Open ID Connect, и я неправильно понял природу этой функции.
В любом случае, что-то, что помогло мне найти ответ, было использовать просто отличный OpenID4Java и его simple-openid
Образец JSP. Немедленно это сгладило ошибки в моей подписи, жалуясь, что это было 168 бит (вместо 160).