【发布时间】:2015-07-14 07:43:04
【问题描述】:
我有一个非常基本的客户端/服务器测试设置失败并显示以下消息:
服务器拒绝了客户端凭据。
除非客户端以在服务器上具有管理员权限的帐户登录。这是我不想要的。
这是我的客户端代码:
var formatter = new BinaryFormatter();
...
using (var client = new TcpClient(ip, 1248))
using (var stream = client.GetStream())
using (var negStream = new NegotiateStream(stream, false))
{
await negStream.AuthenticateAsClientAsync(CredentialCache.DefaultNetworkCredentials, string.Empty, ProtectionLevel.EncryptAndSign, TokenImpersonationLevel.Identification));
formatter.Serialize(negStream, "This is a test!");
}
这是我的服务器代码:
var listener = new TcpListener.Create(1248);
listener.Start();
var tcpClient = listener.AcceptTcpClient();
using (var stream = tcpClient.GetStream())
using (var negStream = new NegotiateStream(stream, false))
{
await negStream.AuthenticateAsServerAsync(CredentialCache.DefaultNetworkCredentials, ProtectionLevel.EncryptAndSign, TokenImpersonationLevel.Identification));
Console.WriteLine(formatter.Deserialize(negStream));
}
如何配置服务器以接受任何已登录的用户?我需要查看其他设置吗?还有其他方法可以使用域凭据对流进行身份验证吗?
【问题讨论】:
-
您检查过服务器上的安全事件日志吗?您运行的是哪个操作系统版本?
-
安全事件日志没有失败。没有什么不寻常的。我在 Server 2012 R2 和 Windows 7 上运行。
-
服务端和客户端运行在什么账号下? (Domain-Accounts, NetworkService, LocalUser) 并尝试使用 AuthenticateAsServer() 和 AuthenticateAsClient() 的简单重载
-
TcpClient在网络服务器上作为域服务帐户运行,TcpListener作为普通用户运行。如果我将服务帐户更改为管理员帐户,一切正常。 -
请以该形式描述哪个用户是哪个用户:WORKS TcpClient - 域用户,
TcpClient上的管理员,TcpListener上的管理员。TcpListener- 域用户,TcpClient上正常,TcpListener上正常。 FAILS 也一样
标签: c# windows-authentication tcpclient tcplistener