I’m using a custom UserNamePasswordValidator, which instantiates and logs in to our internal API.
This API exposes an event that’s fired when the user is “kicked” (by another administrative user), and I’d like to respond to this by killing the WCF session, so that further calls throw an exception.
How do I go about doing this?
My WCF service is hosted in a Windows service (not IIS). Instantiating and logging in to the internal API takes quite a long time, so I can’t do it on every service call.
I found some code at http://www.neovolve.com/post/2008/04/07/wcf-security-getting-the-password-of-the-user.aspx that shows how to use a custom
ServiceCredentialsclass and, from there, passing the user’s details all the way through toThread.CurrentPrinciple.Starting from that code, I’ve stashed the Connection object in a custom principal object, which means that I can get to it in a session context. Then, I added a custom
CodeAccessSecurityAttributethat checks that connection object to see if it’s been disconnected. If it has, an exception is thrown, which kills the user’s session.