我們將在Sinatra開發一個小API應用程序。什麼是可用於保護API調用的身份驗證選項?Sinatra - API - 身份驗證
56
A
回答
88
Sinatra沒有內置的認證支持。有一些寶石可用,但大多數都是爲用戶認證而設計的(即用於網站)。對於一個API來說,它們看起來像是矯枉過正。製作你自己的作品很容易。只需檢查每個路由中的請求參數,看看它們是否包含有效的API密鑰,如果不是,則返回401錯誤。 error
呼籲halt
內部,其停止持續的要求 - 如果你的valid_key?
方法返回false調用error
後
helpers do
def valid_key? (key)
false
end
end
get "/" do
error 401 unless valid_key?(params[:key])
"Hello, world."
end
# $ irb -r open-uri
# >> open("http://yourapp.com/api/?key=123")
# OpenURI::HTTPError: 401 Unauthorized
不會發生任何事情。
當然,在每條路線的開始重複檢查並不理想。相反,你可以創建一個小的擴展,增加了條件,以你的路由:
class App < Sinatra::Base
register do
def check (name)
condition do
error 401 unless send(name) == true
end
end
end
helpers do
def valid_key?
params[:key].to_i % 2 > 0
end
end
get "/", :check => :valid_key? do
[1, 2, 3].to_json
end
end
如果你只是想上的所有路由認證,使用before
處理程序:
before do
error 401 unless params[:key] =~ /^xyz/
end
get "/" do
{"e" => mc**2}.to_json
end
2
http://www.secondforge.com/blog/2014/11/05/simple-api-authentication-in-sinatra/有一個稍微更詳細使用用戶令牌的答案。
這一步比API密鑰更復雜,但必要的,如果你的API需要認證登錄用戶做的事情,如編輯名稱/電子郵件/密碼,或訪問每用戶信息。 (即「私人」API行動)。您也可以撤銷/到期用戶令牌讓人註銷等
class App < Sinatra::Base
before do
begin
if request.body.read(1)
request.body.rewind
@request_payload = JSON.parse request.body.read, { symbolize_names: true }
end
rescue JSON::ParserError => e
request.body.rewind
puts "The body #{request.body.read} was not JSON"
end
end
post '/login' do
params = @request_payload[:user]
user = User.find(email: params[:email])
if user.password == params[:password] #compare the hash to the string; magic
#log the user in
else
#tell the user they aren't logged in
end
end
end
(這是值得大家注意的,它是更常見的是從一個HTTP頭,而不是JSON體讀取的憑據,但筆者提到, 。)
相關問題
- 1. Sinatra的API身份驗證
- 2. Webtrends API身份驗證PHP
- 3. Loopback API Explorer身份驗證
- 4. Laravel rest api身份驗證
- 5. C#Google API身份驗證
- 6. Google API身份驗證
- 7. BMC Remedy API身份驗證
- 8. Facebook API身份驗證
- 9. 身份驗證OneDrive Python API
- 10. REST API MongoDB身份驗證
- 11. 安全API身份驗證
- 12. Imgur api身份驗證PHP
- 13. vb.net woocommerce api身份驗證
- 14. Withings api身份驗證
- 15. Outlook 365 API - 身份驗證
- 16. API身份驗證流程
- 17. OpenTok API身份驗證
- 18. Keyvault身份驗證(REST API)
- 19. REST API身份驗證
- 20. Sitecore的身份驗證使用API身份驗證/登錄
- 21. API身份驗證和OAuth2的使用
- 22. jquery身份驗證
- 23. Mongodb身份驗證
- 24. Smtp身份驗證
- 25. Firebase身份驗證
- 26. 禁用其他身份驗證的HTTP基本身份驗證
- 27. SymbolSource身份驗證
- 28. 2因子Windows身份驗證的強身份驗證
- 29. 使用Cognito聯合身份驗證的API網關身份驗證
- 30. Web Api客戶端身份驗證(非用戶身份驗證)最佳實踐
託德Yandell,非常感謝您的詳細的答案和你花在它上面的時間。我真的很感激。這真的很有幫助。 Imran – Saim 2010-08-16 11:30:53
創建一個小擴展似乎過度使用,過濾之前就足夠了,因爲後者可以選擇應用哪些路由。您也可以通過request.path_info從過濾器的主體中知道。 – Robert 2015-05-13 09:13:29