Ruby / Rails 的 OAuth 2 整合方案簡單評比

要讓 API 可以用 OAuth 2 的方式來上鎖(認證),必須要準備這些東西:

因為我要造的 API 是 Grape 搭起來的,掛在 Rails 底下,於是就 survey 了一些方案:

你可能會問: OAuth2 這個 gem 呢?其實他只有實作 Client ,所以不在本文範圍(完)。

Doorkeeper

基本上幫你搞定 Authorization Server 的所有需求,但 Resource Server Guard 則是很簡陋,或說根本是隨便寫的,只會幫你丟 401 Unauthorized ,Bearer Token 的要求他幾乎沒實作。具體程式碼在 lib/doorkeeper/helpers/filter.rb (Tag: v0.7.3) 。有人開 Pull Request 但沒有 merge: support the spec of 'invalid_token' response by masarakki

Rack::OAuth2

簡單來說只幫你處理掉 Protocol 而已,支持它的 Model 和 View 必須自己處理。

Resource Server Guard 「完成度很高」是相對於 Doorkeeper 而言。

問題點:

Warden::OAuth2

它會跟 Devise 的 warden 卡在一起,所以我沒有深入研究。

Grape 的 OAuth 2 authorization

Source Code (master): https://github.com/intridea/grape/blob/master/lib/grape/middleware/auth/oauth2.rb

檢閱日期是 2013/10/07 ,與當下最新版本 v0.6.0 一致。

既然目前的版本無法使用,只能看 code 說故事。它的問題所在:

我的做法: Doorkeeper + Rack::OAuth2

以上每個 solution 都不完美,就只好自己搭了。

我的做法是這樣:

之後會寫一篇 Tutorial ……最近幾天內會發表。

Edit: 寫完了: OAuth 2.0 Tutorial: Grape API 整合 Doorkeeper