class Grape::Middleware::Auth::OAuth2
OAuth 2.0 authorization for Grape
APIs.
Public Instance Methods
before()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 17 def before verify_token(token_parameter || token_header) end
default_options()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 6 def default_options { token_class: 'AccessToken', realm: 'OAuth API', parameter: %w(bearer_token oauth_token access_token), accepted_headers: %w(HTTP_AUTHORIZATION X_HTTP_AUTHORIZATION X-HTTP_AUTHORIZATION REDIRECT_X_HTTP_AUTHORIZATION), header: [/Bearer (.*)/i, /OAuth (.*)/i], required: true } end
error_out(status, error)
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 72 def error_out(status, error) throw :error, message: error, status: status, headers: { 'WWW-Authenticate' => "OAuth realm='#{options[:realm]}', error='#{error}'" } end
params()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 25 def params @params ||= request.params end
request()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 21 def request @request ||= Grape::Request.new(env) end
token_class()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 51 def token_class @klass ||= eval(options[:token_class]) # rubocop:disable Eval end
token_header()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 36 def token_header return false unless authorization_header Array(options[:header]).each do |regexp| return $1 if authorization_header =~ regexp end nil end
token_parameter()
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 29 def token_parameter Array(options[:parameter]).each do |p| return params[p] if params[p] end nil end
verify_token(token)
click to toggle source
# File lib/grape/middleware/auth/oauth2.rb, line 55 def verify_token(token) token = token_class.verify(token) if token if token.respond_to?(:expired?) && token.expired? error_out(401, 'invalid_grant') else if !token.respond_to?(:permission_for?) || token.permission_for?(env) env['api.token'] = token else error_out(403, 'insufficient_scope') end end elsif !!options[:required] error_out(401, 'invalid_grant') end end