2016-11-11 3 views
0

Я реализовал провайдера OpenID 1.1 на Java, но у меня проблемы со смарт-клиентами, используя assoc_handle от associate, придумывая разные подписи. Тупые клиенты, полагающиеся на check_authentication, отлично работают. В частности, я тестирую против LiveJournal и продолжает возвращаться:Как сгенерировать OpenID 1.1 sig на основе assoc_handle?

signature_mismatch: До объединения признан недействительным ответ ID поставщика.

Тело моей 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 и отслеживать его шаги. Учитывая, что я могу понять, где я вычисляю вещи по-разному.

ответ

0

Проблема в моем случае использует base64url encoding на выходе ключевых значений (mac_key, enc_mac_key, dh_server_public) вместо стандартного base64. В Apache Commons я использовал encodeBase64URLSafeString вместо просто encodeBase64String. Это было неудачное перенесение с работы в Open ID Подключиться ранее, и я неправильно понял природу функции.

В любом случае, что-то, что помогло мне найти ответ, было просто отличным OpenID4Java и его образцом simple-openid JSP. Сразу же это зачеркнуло ошибки на моей подписи, жалуясь, что это было 168 бит (вместо 160).

Смежные вопросы