我試圖實現Disquss的Single Sign On功能。 Disquss有一個測試控制檯,可以讓我們快速測試這些值。首先,我們確保我們獲得了硬編碼值與控制檯一起工作,所以我們確信我們理解了Disquss需求。接下來,我們想在rails中實現同樣的事情,但是我們在這裏遇到了問題。Rails中的HMACSHA1 - 奇怪的結果
問題是這樣的事實:紅寶石部未產生預期值,事實上,它產生的垃圾,這完全是不同形式的預期值:
這是從Disquss手冊:
該消息體(Base64編碼)
消息體必須包括以下大小寫敏感性質除非另有說明:
id - any unique user ID associated with that account within your user database. This will be used to generate a unique username to reference in the Disqus system. IDs must be completely unique; if you're using multiple datastores locally, for example, make sure not to re-use IDs when passing them to Disqus as that will result in account conflicts.
username - The displayed name for that account
email - The registered email address for that account
avatar (optional) - A link to that user's avatar
url (optional) - A link to the user's website
HMAC-SHA1使用HMAC-> SHA1(SECRET_KEY,消息+ '' +時間戳)
此之後例如我們設計thew下列導軌代碼(它仍然是在測試階段生成的簽名
,因此看跌期權):
secret_key = "12312312312312312312312312312312312312312312312312"
digest = OpenSSL::Digest::Digest.new('sha1')
puts @disqus_timestamp = Date.today.to_time.to_i
puts @disqus_serializer_message = {"id"=> session[:frontend_user].to_s,"username"=>@fuser.username,"email"=>@fuser.email }.to_json
puts @disqus_message = Base64.encode64(@disqus_serializer_message)
puts @disqus_signature = OpenSSL::HMAC.digest(digest,secret_key,@disqus_message + ' '+ @disqus_timestamp.to_s)
puts @sso_payload = ""
puts "END"
我們應該得到三個值: 1. JSON序列化格式,如:
eyJ1c2VybmFtZSI6InZlZHJhbiBtYXJpY2V2aWMiLCJpZCI6IjgiLCJlbWFp bCI6IndleC5hbHBoYUBnbWFpbC5jb20ifQ ==
Json的作品
- 已計算HMAC: 我們收到此類型的格式:
5œ[ƒmòØ™`O「的OU ©≠Δ8
但我們應該以這種形式來得到的東西:
4683eff451100191c60d2a0f0e72f3a6d15db950
我嘗試不同的東西,但無濟於事。可能是什麼問題?
這樣做的格式明智的伎倆。仍然不起作用,但主要是由於錯誤的代碼或其他東西。將在這方面做更多的工作。 – 2013-03-13 14:33:05