Как сгенерировать сиг 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).

Другие вопросы по тегам