OAuth 2.0 authorization for Grape APIs.
# File lib/grape/middleware/auth/oauth2.rb, line 14 def before verify_token(token_parameter || token_header) end
# File lib/grape/middleware/auth/oauth2.rb, line 4 def default_options { :token_class => 'AccessToken', :realm => 'OAuth API', :parameter => %w(bearer_token oauth_token), :accepted_headers => %w(HTTP_AUTHORIZATION X_HTTP_AUTHORIZATION X-HTTP_AUTHORIZATION REDIRECT_X_HTTP_AUTHORIZATION), :header => [/Bearer (.*)/, /OAuth (.*)/] } end
# File lib/grape/middleware/auth/oauth2.rb, line 62 def error_out(status, error) throw :error, :message => error, :status => status, :headers => { 'WWW-Authenticate' => "OAuth realm='#{options[:realm]}', error='#{error}'" } end
# File lib/grape/middleware/auth/oauth2.rb, line 42 def token_class @klass ||= eval(options[:token_class]) end
# File lib/grape/middleware/auth/oauth2.rb, line 25 def token_header return false unless authorization_header Array(options[:header]).each do |regexp| if authorization_header =~ regexp return $1 end end nil end
# File lib/grape/middleware/auth/oauth2.rb, line 18 def token_parameter Array(options[:parameter]).each do |p| return request[p] if request[p] end nil end
# File lib/grape/middleware/auth/oauth2.rb, line 46 def verify_token(token) if token = token_class.verify(token) if token.respond_to?(:expired?) && token.expired? error_out(401, 'expired_token') else if !token.respond_to?(:permission_for?) || token.permission_for?(env) env['api.token'] = token else error_out(403, 'insufficient_scope') end end else error_out(401, 'invalid_token') end end