Sinatra REST API应用程序的身份验证

时间:2013-08-19 13:40:21

标签: ruby authentication oauth sinatra warden

我正在使用Sinatra构建API(为客户端使用Angular并希望其他人可以访问API)并让它成为OAuth提供者。我想知道最好的路线是什么(解决现有的宝石或从Warden或其他东西上解决自己的解决方案)。

在使用Rails之前已经使用了设计和门卫进行身份验证和oauth,想知道什么是Sinatra的最佳解决方案。

理想情况下,我不想要视图或能够扩展/修改现有解决方案的操作,因为我只是作为API与它进行交互。

3 个答案:

答案 0 :(得分:1)

我最近使用S / O中的以下答案做了同样的事情

What is a very simple authentication scheme for Sinatra/Rack

它意味着用户模型,但我只是在配置文件中设置用户和管理员密码,而不是使用它。然后我有一个只需要密码的登录表单。当用户输入该密码时,我会根据设置中的密码进行检查,并将会话['用户']设置为:admin或:user根据匹配的任何一个(或者如果没有则为零)。然后在我的每条路线上,我打电话给auth :: user或auth :: admin。

答案 1 :(得分:1)

API通常会接受您的登录请求,并向您发送一个身份验证令牌,您需要在每次调用时将其传回。这与基于cookie的会话非常相似,您的浏览器会自动传回在初次访问网站时获取的cookie。

从我在Sinatra的文档中看到的,您可以创建一个基于会话的身份验证系统:

enable :session
disable :show_exceptions

use Rack::Session::Pool,
  key: 'session_id'

post '/login' do
  user = User.login_success(params)
  halt 401 if user.nil?
  session[:user] = user
  200
end

get '/fun' do
  user = session[:user]
  halt 401 if user.nil?
  halt 403 if !user.has_permission_for '/fun'
  "fun was had"
end

现在,您在客户端需要做的就是在请求API函数时传回为响应初始访问而返回的cookie令牌。这可以通过任何支持cookie存储(例如libcurl)的Web客户端库或手动将会话cookie插入请求标头来完成。 Rack::Minitest功能还支持Cookie,因此您可以使用minitest测试API。

答案 2 :(得分:0)

请参阅Sinatra API Authentication

快速摘要:

  • Sinatra没有内置身份验证。
  • 最好自己构建auth(参见链接)。
  • 有可用的宝石,但您可能不需要像API这样简单的东西。