mirror of
https://github.com/heartcombo/devise.git
synced 2022-11-09 12:18:31 -05:00
The http authentication code was not checking for the type of authentication in the Authentication header.
This caused issues with OAuth header authentication. Please note I have added a test but I'm not sure it works right as it doesn't fails without the change :-) But it does fix failures in the oauth-plugin provider specs using devise.
This commit is contained in:
parent
5c928df66b
commit
2fdb71716f
2 changed files with 16 additions and 2 deletions
|
@ -96,8 +96,8 @@ module Devise
|
|||
|
||||
# Helper to decode credentials from HTTP.
|
||||
def decode_credentials
|
||||
username_and_password = request.authorization.split(' ', 2).last || ''
|
||||
ActiveSupport::Base64.decode64(username_and_password).split(/:/, 2)
|
||||
return [] unless request.authorization && request.authorization =~ /^Basic (.*)/
|
||||
ActiveSupport::Base64.decode64($1).split(/:/, 2)
|
||||
end
|
||||
|
||||
# Sets the authentication hash and the password from params_auth_hash or http_auth_hash.
|
||||
|
|
|
@ -39,6 +39,14 @@ class HttpAuthenticationTest < ActionController::IntegrationTest
|
|||
end
|
||||
end
|
||||
|
||||
test 'test request with oauth2 header doesnt get mistaken for basic authentication' do
|
||||
swap Devise, :http_authenticatable => true do
|
||||
add_oauth2_header
|
||||
assert_equal 401, status
|
||||
assert_equal 'Basic realm="Application"', headers["WWW-Authenticate"]
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def sign_in_as_new_user_with_http(username="user@test.com", password="123456")
|
||||
|
@ -46,4 +54,10 @@ class HttpAuthenticationTest < ActionController::IntegrationTest
|
|||
get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => "Basic #{ActiveSupport::Base64.encode64("#{username}:#{password}")}"
|
||||
user
|
||||
end
|
||||
|
||||
# Sign in with oauth2 token. This is just to test that it isn't misinterpreted as basic authentication
|
||||
def add_oauth2_header
|
||||
get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => "OAuth #{ActiveSupport::SecureRandom.base64}"
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in a new issue