OAuth2在开发和生产中

时间:2013-09-17 17:03:59

标签: oauth-2.0 development-environment production-environment

在开发和生产环境中使用OAuth2身份验证的最佳策略是什么?

例如,我想创建一个基于Web的开源Web客户端。我已将我的客户注册为GitHub应用程序。根据OAuth2规范,我必须在注册应用程序时指定重定向URL。我应该使用什么redirect_url,基于localhost还是真正的生产网址?如果我使用基于localhost(用于开发),我的生产站点显然会停止工作(反之亦然)。

将client_id和client_secret存储在公共代码中是否安全?如果不是,存储它的最佳策略是什么(即在一些未添加到源版本控制系统的配置文件中)?

1 个答案:

答案 0 :(得分:3)

对于rails,我使用了名为figaro的宝石。

您可以定义特定于环境的变量(config / application.yml):

CALENDAR_SCOPE: https://www.googleapis.com/auth/calendar

production:
  CLIENT_ID: 393sdfgsdfg.apps.googleusercontent.com
  CLIENT_SECRET: sdfgdfsgsg
  OAUTH2_REDIRECT: http://mydomain/users/auth/google_oauth2/callback
  etc...

development:
  CLIENT_ID: 24asdfsadfas.apps.googleusercontent.com
  CLIENT_SECRET: asdfsadf
  OAUTH2_REDIRECT: http://localhost:3000/users/auth/google_oauth2/callback
  etc....

然后在代码中使用这些:

client = Google::APIClient.new({:auto_refresh_token => false})
client.authorization.scope = ENV['CALENDAR_SCOPE']
client.authorization.client_id = ENV['CLIENT_ID']
client.authorization.client_secret = ENV['CLIENT_SECRET']
client.authorization.redirect_uri = ENV['OAUTH2_REDIRECT']
etc...

您必须记住在启动服务器时设置环境。例如:

thin -e production start

thin -e development start

您可能希望gitignore application.yml文件。