In the constructor of my WCF service class I am setting the current principal to be that of the principal passed in the header of the message:
Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns");
This seems to work fine, however when I come to reference the principal in a method, the Thread.CurrentPrincipal has reverted to a WindowsPrincipal.
Presumably the method is firing on a different thread. How can I ensure that the method is using the principal set in the constructor of the service?
I've just found the answer to my original question. In order to stop WCF overriding the principal with a blank one, set the following in the behavior configuration:
<serviceAuthorization principalPermissionMode="None" />
Simple as that and no need to made sweeping changes to the existing code base.