我已經在Java中實現了一個OpenID 1.1提供程序,但是我使用associate
的assoc_handle
提供了不同的簽名,因此智能客戶端遇到問題。愚蠢的客戶依靠check_authentication
工作正常。具體來說,我正在測試針對的LiveJournal和它不斷返回:如何基於assoc_handle生成OpenID 1.1 sig?
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
是由初始associate
呼叫(例如,經由secret(assoc_handle)
檢索爲每規範)返回的mac_key
的BASE64解碼版本。我做了相當數量的測試,以確保enc_mac_key
可以正確解密。
有什麼想法?這有什麼明顯的錯誤嗎?
還是...有沒有一個簡單的,獨立的客戶端,任何人都知道哪些會做OpenID 1.1並追蹤其步驟。鑑於我可能能夠弄清楚我在計算事情的方式不同。