File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11require 'test_helper'
22
3- def sso_response ( url )
3+ def sso_response ( url , secret = Rails . application . secrets . sso_secret )
44 parsed = Rack ::Utils . parse_query ( url . split ( '?' ) [ -1 ] )
55 decoded = Base64 . decode64 ( parsed [ 'sso' ] )
66 decoded_hash = Rack ::Utils . parse_query ( decoded )
@@ -16,7 +16,7 @@ def sso_response(url)
1616 query = Rack ::Utils . build_query ( user_data )
1717 payload = Base64 . strict_encode64 ( query )
1818 escaped = CGI ::escape ( payload )
19- signed = OpenSSL ::HMAC . hexdigest ( 'sha256' , Rails . application . secrets . sso_secret , payload )
19+ signed = OpenSSL ::HMAC . hexdigest ( 'sha256' , secret , payload )
2020
2121 [ "#{ return_sso_url } ?sso=#{ escaped } &sig=#{ signed } " , decoded_hash [ 'nonce' ] ]
2222end
@@ -47,4 +47,14 @@ class SessionControllerTest < ActionDispatch::IntegrationTest
4747 assert_equal ( 422 , response . status )
4848 assert_nil ( controller . current_user )
4949 end
50+
51+ test 'shouldn\'t allow users to login if incoming payload is signed with a different secret' do
52+ get '/login'
53+ location = response . headers [ 'Location' ]
54+ url , _ = sso_response ( location , 'wr0ng$ecret' )
55+ assert_raise RuntimeError do
56+ get url
57+ end
58+ assert_nil ( controller . current_user )
59+ end
5060end
You can’t perform that action at this time.
0 commit comments