Forum Discussion
AndOs
Cirrostratus
Dec 03, 2012Keep applications active after web interface logoff
Hi!
I'm trying to make a configuration with Big-ip APM to replace two old Citrix Access Gateways for our Citrix farms.
I've made a setup using the iApp for XenApp using f5.citrix_xenapp_xendesktop.2012_06_27 which load balances and authenticates users to our XenApp 5.4 web interfaces.
We are using TMOS 11.2.0 and will not replace the web interface with webtop (basically do pass-through auth if I understand this correct)
One issue I immediately ran into was that the applications I start gets disconnected when I log off the web interface and my APM session closes.
The setting "Logoff behavior: Log off all sessions" is unchecked in Citrix web interface.
If I start applications directly from the web interface servers, without going through the APM, the appications remain active when I log off.
Is there any way to get the applications to remain active even when the APM session closes, so that it mimics the behavior of the old gateways?
I've looked through the iApp deployment guide and also the settings in APM, but haven't found anything that seems to control this.
Thanks!
/Andreas
21 Replies
- Andreas,
- AndOs
Cirrostratus
Thanks for your quick reply!
- Andreas,
- Andreas,
- AndOs
Cirrostratus
It would be great if the users could get back to the APM logon, and basically log back on if they wanted to. - MRHSession cookie contains the sessionid that is read by APM. If the session indicated in the cookie exists, user will be allowed. ACCESS:session create will create a new session, but it will NOT insert the coookie automatically in the response.
- AndOs
Cirrostratus
Ah ok. - AndOs
Cirrostratus
After a lot of trial and error, I managed to piece together an iRule from various sources here on devcentral. - hoolio
Cirrostratus
Nice work in figuring this out.when RULE_INIT { set static::access_debug 0 set static::logonpage "https://logon.company.com/" set static::logoffURI "/auth/loggedout.aspx" } when ACCESS_ACL_ALLOWED { if {$static::access_debug > 1 } { log local1. "uri=[HTTP::uri] | session=[ACCESS::session sid] | client=[IP::client_addr]:[TCP::client_port]" } Has the user logged off? if {[string tolower [HTTP::path]] eq $static::logoffURI } { if {$static::access_debug} { log local1. "Detected logoff!" } need to track the sessionID because after the redirect has been sent, the browser may use an already established (access granted) tcp connection that will be allowed through ACCESS_ACL_ALLOED. table add "ctxloggedoutsessions_[ACCESS::session sid]" 1 60 90 store the APM session cookies from the request. if {[HTTP::cookie exists "MRHSession"]} { set MRHSession [HTTP::cookie MRHSession] if {$static::access_debug} { log local1. "MRHSession=$MRHSession" } } if {[HTTP::cookie exists "LastMRH_Session"]} { set LastMRH_Session [HTTP::cookie LastMRH_Session] if {$static::access_debug} { log local1. "LastMRH_Session =$LastMRH_Session " } } } } when HTTP_RESPONSE { set sessionstatus [table lookup "ctxloggedoutsessions_[ACCESS::session sid]]" check if this reponse is for a session that has been marked as logged off. if { $sessionstatus == 1 } { yes, user has logged off. if {$static::access_debug} { log local1. "Found session [ACCESS::session sid] in table" } set cookieheaders "" prepare the APM session cookies to be expired by setting the date to UNIX TS 0 if { [info exists MRHSession] } { set cookieheaders "MRHSession=$MRHSession;expires=Thu, 01-Jan-1970 00:00:00 GMT;path=/;" if {$static::access_debug} { log local1. "setting cookie, MRHSession" } unset MRHSession } if { [info exists LastMRH_Session] } { set cookieheaders "$cookieheaders\r\nSet-Cookie: LastMRH_Session=$LastMRH_Session;expires=Thu, 01-Jan-1970 00:00:00 GMT;path=/;" if {$static::access_debug} { log local1. "setting cookie, LastMRH_Session" } unset LastMRH_Session } Loop through all other cookies which are set in the repsonse, and expire those as well. This does not seem to be needed. if {$static::access_debug} { log local1. "looping cookies..." } foreach orgCookieName [HTTP::cookie names] { if {$static::access_debug} { log local1. "found cookie: $orgCookieName=[HTTP::cookie value $orgCookieName]" } set cookieheaders "$cookieheaders\r\nSet-Cookie: $orgCookieName=[HTTP::cookie value $orgCookieName];expires=Thu, 01-Jan-1970 00:00:00 GMT;[HTTP::cookie path $orgCookieName];" } if {$static::access_debug} { log local1. "Custom cookies: $cookieheaders" } Send a redirect response to the client. With Connection: Close! if { $cookieheaders != "" } { HTTP::respond 302 Location "$static::logonpage" "Set-Cookie" $cookieheaders "X-OLL-CTX-LOGOUT" "1" "Connection" "Close" } else { HTTP::respond 302 Location "$static::logonpage" "X-OLL-CTX-LOGOUT" "1" "Connection" "Close" } } }
- AndOs
Cirrostratus
Thanks!
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects