Skip to content

Commit 4fe698c

Browse files
committed
Update single logout code sample to encourage early session termination. See #519
1 parent 533c84e commit 4fe698c

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

README.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -644,16 +644,22 @@ def sp_logout_request
644644
delete_session
645645
else
646646
647-
# Since we created a new SAML request, save the transaction_id
648-
# to compare it with the response we get back
649647
logout_request = OneLogin::RubySaml::Logoutrequest.new()
650-
session[:transaction_id] = logout_request.uuid
651-
logger.info "New SP SLO for userid '#{session[:userid]}' transactionid '#{session[:transaction_id]}'"
648+
logger.info "New SP SLO for userid '#{session[:userid]}' transactionid '#{logout_request.uuid}'"
652649
653650
if settings.name_identifier_value.nil?
654651
settings.name_identifier_value = session[:userid]
655652
end
656653
654+
# Ensure user is logged out before redirect to IdP, in case anything goes wrong during single logout process (as recommended by saml2int [SDP-SP34])
655+
logged_user = session[:userid]
656+
logger.info "Delete session for '#{session[:userid]}'"
657+
delete_session
658+
659+
# Save the transaction_id to compare it with the response we get back
660+
session[:transaction_id] = logout_request.uuid
661+
session[:logged_out_user] = logged_user
662+
657663
relayState = url_for controller: 'saml', action: 'index'
658664
redirect_to(logout_request.create(settings, :RelayState => relayState))
659665
end
@@ -681,7 +687,7 @@ def process_logout_response
681687
logger.error "The SAML Logout Response is invalid"
682688
else
683689
# Actually log out this session
684-
logger.info "Delete session for '#{session[:userid]}'"
690+
logger.info "SLO completed for '#{session[:logged_out_user]}'"
685691
delete_session
686692
end
687693
end
@@ -690,6 +696,8 @@ end
690696
def delete_session
691697
session[:userid] = nil
692698
session[:attributes] = nil
699+
session[:transaction_id] = nil
700+
session[:logged_out_user] = nil
693701
end
694702
```
695703

0 commit comments

Comments
 (0)