WCF Service - Custom Principal
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 t开发者_Python百科o 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.
See: http://connect.microsoft.com/VisualStudio/feedback/details/369445/wcf-service-configured-for-transport-security-shouldnt-change-thread-currentprincipal
WCF always sets principal in AuthorizationPolicy so it probably overwrites your changes. You should implement custom authorization policy and set principal there.
精彩评论