【发布时间】:2017-02-06 12:04:02
【问题描述】:
我编写了一个非常简单的 WFCSerice,它返回提供的 Windows 用户名。这是客户端代码:
public Form1()
{
ServiceReference1.Service1Client s1 = new ServiceReference1.Service1Client();
s1.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
string str = s1.ReturnWindowsUsername();
InitializeComponent();
}
我可以使用 Fiddler 在 HTTP 标头中查看凭据:
我尝试对基本身份验证做同样的事情(访问另一个支持基本身份验证的 Web 服务)。这是客户端代码:
public Form1()
{
InitializeComponent();
ServiceReference1.Service1Client s1 = new ServiceReference1.Service1Client();
s1.ClientCredentials.UserName.UserName = "testuser";
s1.ClientCredentials.UserName.Password = "testpassword";
string str = s1.GetData(1);
}
这是 Fiddler 在使用基本身份验证时的屏幕截图:
为什么使用基本身份验证时标头中没有任何内容。基本身份验证服务似乎按预期工作。这是响应(有趣的是,似乎有两个请求和两个响应):
【问题讨论】:
-
您是否禁用了匿名身份验证,并在 IIS 中启用了基本身份验证? Authorization 标头仅在来自服务器的 401 质询之后添加到请求中。如果允许匿名请求,则没有 401,因此不需要标头。
-
@user1429080,两者都已启用。
-
尝试禁用匿名身份验证。有区别吗?
-
@user1429080,如果我这样做,则会引发以下异常: System.ServiceModel.Security.MessageSecurityException:附加信息:HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是 'Basic realm=mydomain.mypc.local.
-
请求的“trace”在 Fiddler 中是怎样的?应该有来自服务器的 401 响应,然后是来自客户端的带有标头的新请求。如果您收到 404,则用户名/密码组合无效。
标签: c# wcf fiddler basic-authentication