C# WCF与客户端上的标识相同?

C# WCF与客户端上的标识相同?,c#,wcf,identity,C#,Wcf,Identity,对于一个实验性项目,我正在与一项服务作斗争。客户端是ASP.NETMVC4,该服务将使用WCF构建。目前,所有系统都位于受信任的子系统中,因此SSL/证书不一定是必需的 我目前正在处理的问题是:当我创建一个新的GenericEntity时,是否可能这样做: IIdentity newIdentity = new GenericIdentity("Test", "Custom authentication"); string[] newRoles = { "TestRole" }; IPrinci

对于一个实验性项目,我正在与一项服务作斗争。客户端是ASP.NETMVC4,该服务将使用WCF构建。目前,所有系统都位于受信任的子系统中,因此SSL/证书不一定是必需的

我目前正在处理的问题是:当我创建一个新的GenericEntity时,是否可能这样做:

IIdentity newIdentity = new GenericIdentity("Test", "Custom authentication");
string[] newRoles = { "TestRole" };
IPrincipal testPrincipal = new GenericPrincipal(newIdentity, newRoles);
Thread.CurrentPrincipal = testPrincipal;
当我在WCF服务上调用以下代码时,可以创建用户:

ServiceSecurityContext.Current.WindowsIdentity;

我得到了我在客户端创建的用户?或者我必须为此编写一个WCF扩展性

我目前正在使用WsHttpBinding和安全模式传输和clientCredentialType:Windows。可能配置有问题?

在服务器端(WCF),安全上下文将具有您用于对服务进行身份验证的用户名值

这意味着,如果您定义了客户端windows身份验证,WCF将发现安全上下文中填充了您使用的windows标识的用户名

为了让您通过windows帐户验证到服务,您可以使用以下代码 在客户端:

channelFactory.Credentials.Windows.ClientCredential =
                        new NetworkCredential(username, password, domain);
使用此代码后,您可以使用以下代码访问服务器端的标识:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity
一般来说,在客户端身份验证信息上尽量明确。现在,你似乎 通过设置标识,可以简单地使用windows身份验证架构的默认行为 在当前线程上


我希望这会有所帮助。

我发现要在WCF中自动实现这一点,您必须指定一个证书

在发送到WCF服务的消息中,我使用datacontracts中的信息创建了一些属性,这些信息是创建GenericPrinicpal所必需的(在这里是角色的用户名)。因为我有一个受信任的子系统,所以我不想对每个WCF服务上的用户进行身份验证(对于我的场景来说,这会带来很大的开销)


通过这个,我创建了一个WCF扩展,它实现了一个参数检查器,并且通过反射,我在合同的指定属性中设置了来自CurrentPrincipal的凭据

在检查ServiceSecurityContext.Current.WindowsIdentity时,是否在两个客户端/wcf绑定上都指定了NTLM auth架构,或者使用了哪种身份验证;或ServiceSecurityContext.Current.PrimaryIdentity;在WCF服务上,VS2012调试器声明使用了此身份验证架构。但是我的Windows标识显示为用户名,而不是我在ASP.NET MVC 4应用程序中使用GenericEntity创建的用户名。但是WCF不可能自动检测到这一点吗?
channelFactory.Credentials.Windows.ClientCredential =
                        new NetworkCredential(username, password, domain);
OperationContext.Current.ServiceSecurityContext.PrimaryIdentity