下面的SOAP调用使用我的凭据工作正常,但当其他人使用我的.EXE调用WCF服务时,我得到401拒绝。我试图找出传递的凭据是什么。
我可以查看IIS日志,但我正在尝试以编程方式执行此操作,谢谢:
public static Guid GetServerID(string serverName, string soapUrl)
{
Guid result;
try
{
Guid vServerId = new ControllerWS.Controller
{
Url = soapUrl,
Timeout = Config.SoapCallTimeOut,
Credentials = CredentialCache.DefaultCredentials
}.GetServerId(serverName);
result = vServerId;
//Console.WriteLine("CredentialCache.DefaultCredentials: " + CredentialCache.DefaultCredentials.ToString());
//ICredentials Credentials = CredentialCache.DefaultCredentials.GetCredential()
}
答案 0 :(得分:1)
它实际上取决于您使用的身份验证类型。当带有模拟的Windows凭据时,您可以获得这样的用户名:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name
如果您使用普通用户名和密码,那么这些值可以存储在请求标头内,并按如下方式读取:
MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;
string userId = headers.GetHeader<Guid>("MyKey", "MyNamespce");
答案 1 :(得分:0)
您可以使用服务器端的IDispatchMessageInspector拦截包括标头在内的完整邮件。从那里,您可以检查传入的凭据。
Here's a blog post概述了如何记录消息检查器中的完整消息,包括完成连接所需的配置步骤。