Man*_*vid 68 ruby ruby-on-rails devise secret-key ruby-on-rails-4
我是Rails 4的新手,并且不理解在Rails 4中使用secret_key_baseunder config/secrets.yml.你能解释一下这个概念吗?
此外,当我在生产环境中我的工作,我提示设置secret_key有devise.rb,config.secret_key和secret_key_base.但是,我可以使用该rake secret命令生成一个新秘密.
开发和生产环境有什么区别?
secret_key当我secret_key_base每次生成时添加它时,它是如何匹配新生成的?
如何使用其他服务器保护应用程序?
And*_*eko 56
该secret_token.rb文件的内容包括一个长随机字符串,用于验证签名cookie的完整性(例如人们登录您的Web应用程序时的用户会话).
文件说:
使用
secret_token.rb初始化程序中现有的secret_key_base 为生产模式下运行Rails应用程序的用户设置SECRET_KEY_BASE环境变量.或者,您可以简单地将现有的secret_key_base从secret_token.rb初始化程序复制到生产部分下的secrets.yml ,替换<%= ENV["SECRET_KEY_BASE"] %>.
由于它是重要的文件,并且您不能将它放到.gitignore中,因此使用env变量来存储secret_key_base值是一种很好的做法:
创建.env或.powenv归档并将其存储为:
export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
然后在 config/initializers/secret_token.rb 
YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments
  ('a' * 30) # should be at least 30 chars long
else
  ENV['SECRET_TOKEN']
end
这篇文章 有点陈旧(但有点长),但确实充满了有关该主题的有用信息.
从Rails 4.2开始,不再有secret_token.rb文件.根据新的约定,有一个config/secrets.yml文件旨在存储应用程序的秘密.
有一个读关于如何升级现有的应用程序,根据创新,4.2.x版.
从技术上讲,目的secrect_key_base是成为应用程序key_generator方法的秘密输入(检查Rails.application.key_generator).
key_generator因此secret_key_base,应用程序由Rails框架中的三个核心功能使用:
cookies.encrypted.cookies.signed.message_verifier实例派生密钥.请查看@michaeljcoyne撰写的文章中有关三篇文章的更多信息.
lak*_*are 23
在Rails 4中,
Hello,和session['a'] = 'b',你的cookie看起来像这样:
_Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689
这意味着:
_Hello_session=<encrypted a=b>--<digital signature>
Cookie由服务器设置并保持客户端,每次我们请求页面时,浏览器都会将cookie重新设置为服务器.
为了防止邪恶的人理解a=b字符串,它是加密的.
为了防止邪恶的人篡改cookie,使用了数字签名.  
在这两种情况下都使用secret_key_base值(加密/解密a = b并验证数字签名).