我正在用Sinatra構建API(爲客戶端使用Angular並希望其他人可以訪問API),並讓它成爲OAuth提供者。我想知道最好的路線是什麼(去掉現有的寶石或者把自己的解決方案從校長那裏拿走)。對Sinatra REST API的驗證應用
在使用Rails之前,曾使用devise和doorkeeper進行認證和oauth,想知道Sinatra的最佳解決方案是什麼。
理想情況下,我不希望這些視圖或能夠擴展/修改現有解決方案的操作,因爲我純粹將其作爲API進行交互。
我正在用Sinatra構建API(爲客戶端使用Angular並希望其他人可以訪問API),並讓它成爲OAuth提供者。我想知道最好的路線是什麼(去掉現有的寶石或者把自己的解決方案從校長那裏拿走)。對Sinatra REST API的驗證應用
在使用Rails之前,曾使用devise和doorkeeper進行認證和oauth,想知道Sinatra的最佳解決方案是什麼。
理想情況下,我不希望這些視圖或能夠擴展/修改現有解決方案的操作,因爲我純粹將其作爲API進行交互。
快速摘要:
我只是用了以下的答案必須從S/O
What is a very simple authentication scheme for Sinatra/Rack
這意味着用戶模式最近做了同樣的事情,但不是用,我只是設置一個用戶和管理員密碼在我的配置文件中。然後我有一個登錄表單,只需要一個密碼。當用戶輸入密碼時,我將其與設置中的密碼進行覈對,並將會話['user']設置爲:admin或:user,根據匹配的任何一個(或者如果沒有則爲零)。然後在我的每條路線上,我相應地調用了auth::user或auth::admin。
API通常會接受您的登錄請求並向您發送一個身份驗證令牌,您需要在每次調用中返回該令牌。這與基於Cookie的會話非常相似,在這些會話中,瀏覽器會自動傳回在首次訪問網站時獲取的Cookie。
從我在西納特拉的文檔所看到的,你可以做一個基於會話的認證系統是這樣的:
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
現在你需要在你的客戶做的是傳回返回的cookie的令牌以響應請求API函數時的初始訪問。這可以通過任何支持Cookie存儲的Web客戶端庫(例如libcurl)或通過手動將會話cookie插入到請求頭中來完成。 Rack::Minitest
功能還支持cookie,因此您可以使用minitest測試您的API。
您可能想結賬葡萄https://github.com/intridea/grape – zotherstupidguy