The NetworkCredential returned from CredentialCache.DefaultCredential is simply a placeholder. If you look at it using Debugger, you will see that it is a type of SystemNetworkCredential. The internal API checks this type to see whether to use integrated authentication or not. There are other ways to get the current username (for example, WindowsIdentity.GetCurrent ()).
EDIT: To specify an impersonation for a WCF operation, add this attribute to the method that implements the contract:
[OperationBehavior(Impersonation = ImpersonationOption.Required)] public void SomeMethod() {
source share