0

下面的 SOAP 调用使用我的凭据可以正常工作,但是当其他人使用调用 WCF 服务的我的 .EXE 时,我得到 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()
        }
4

2 回答 2

1

这实际上取决于您使用的身份验证类型。当具有模拟的 Windows 凭据时,您可以获得如下用户名:

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name

如果您使用的是普通用户名和密码,则这些值可以存储在请求标头中并如下所示:

MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;
string userId = headers.GetHeader<Guid>("MyKey", "MyNamespce");
于 2012-12-23T21:39:07.620 回答
0

您可以在服务器端使用IDispatchMessageInspector来拦截包括标头在内的完整消息。从那里您可以检查正在传递的凭据。

这是一篇博客文章,概述了如何从消息检查器记录完整消息,包括连接它所需的配置步骤。

于 2012-12-22T03:23:04.817 回答