我试图实现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