如何处理Ruby API包装器的身份验证?

时间:2010-07-13 05:08:16

标签: ruby-on-rails ruby api

我正在研究Viddler的API包装器,它最终将被公开,我正在尝试找出处理身份验证/ API密钥的最佳方法,特别是在Rails应用程序中的使用记住。

编写包装器的最简单方法是让代码每次都创建一个新客户端,开发人员可以将API密钥存储在一个常量中以备将来使用:

@client = Viddler::Client.new(VIDDLER_API_KEY)

问题在于,必须继续创建客户端对象并传入API密钥是一种笨重的方式。当您将用户身份验证投入混合时,这会变得更加复杂。

我正在考虑某种解决方案,其中我要在环境文件中设置所有API密钥,然后验证将在before_filter中完成。

Viddler::Client.api_key = 'abc123'
Viddler::Client.authenticate! 'username', 'password'

Viddler::Client然后将其存储在类变量中,您可以在没有任何参数的情况下调用Viddler::Client.new并进行经过身份验证的调用。我要关注的一件事是,这意味着开发人员必须确保在每个请求之前或之后清除身份验证,因为类变量会在请求之间保持不变。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

全局存储API密钥肯定会非常有用,当然也是获取此类信息的方法。另一方面,我认为用户身份验证不应该全局存储,永远不会存储,特别是对于高级API,因为告诉用户“确保添加after_filter :reset_viddler_auth”可能会导致一些意外的安全风险。 / p>

# in a config/initializer/*.rb file or something
Viddler::Client.api_key = "abc123"

# in the controller/action/model/wherever
@client = Viddler::Client.new # anonymous
@client.authenticate!("username", "password") # authenticate anon client

@client_auth = Viddler::Client.new("username", "password") # authenticated client

猜猜你两个世界都是最好的:)甚至可以提供一种方法来创建一个新的客户端,使用另一个API密钥,

@client_other = Viddler::Client.new("username", "password", :api_key => "xyz890")

所以...只需2美分。

PS:不确定它是如何最新的,但已经有一个ruby viddler包装器,仅供参考,http://viddler.rubyforge.org/rdoc/