Как бороться с аутентификацией для оболочки Ruby API? - PullRequest
2 голосов
/ 13 июля 2010

Я работаю над оболочкой API для Viddler , которая в конечном итоге станет общедоступной, и я пытаюсь найти лучший способ справиться с ключами аутентификации / 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 Ответ

1 голос
/ 13 июля 2010

Глобальное хранение ключа API, безусловно, было бы весьма полезно и, безусловно, является способом получения такой информации. С другой стороны, аутентификация пользователей не должна храниться глобально, никогда, особенно для высокоуровневого API, потому что указание вашим пользователям «обеспечить добавление after_filter :reset_viddler_auth» может привести к неожиданным рискам безопасности.

# 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...