一对Master-Agent模式Rails应用,Agent需要验证Master。通常考虑采用HTTP基础认证或者HTTP摘要认证。这里Agent不需要多用户支持,所以只要一个加密口令即可,无需用户名。本文介绍采用JWT实现基于Token验证,结合Rails 4.1的新特性,装载secrets.yml文件里的密钥,作为JWT Token的计算密钥,应用于Rails应用。
Agent端配置
安装jwt Gem
Gemfile添加如下行
然后执行bundle install
让所有Controller验证JWT Token
编辑app/controllers/application_controller.rb
文件,
其中密钥Rails.application.secrets.jwt_secret_key
需要配置config/secrets.yml
。
配置config/secrets.yml
开发和测试环境取静态值,部署环境取环境变量的值。
配置.env文件存放环境变量
安装 dotenv gem,修改Gemfile,添加如下行
请将’dotenv-rails’放在其他依赖环境变量的gem的前面,保存后执行bundle install
Rails.Root目录新建.env
文件
然后将.env
添加到.gitignore
里去,防止其被提交到版本库
与Capistrano集成
修改config/deploy.rb文件,添加如下Task
Master端配置
采用RestClient与Agent端进行通信,需要在请求的头部加入JWT Token以通过Agent端验证。
参考阅读
- JWT based authentication with Ember.js and Rails
- Loads environment variables from ‘.env’
- Generate a New Secret Token for Rails Apps
- A better way to manage the Rails secret token
- Rails 4.1 generates a new secrets.yml file in the config folder