.NET 之所以在第一次尝试中不包含 Authorization 标头是因为它不是抢占式的。
相反的行为,在某些情况下被认为不太安全,即在第一次请求时发送凭据。 (这称为抢先验证)
如果提供程序在第一次尝试后返回 401 错误代码,.NET 将执行第二次尝试,其中将包含授权标头和凭据。
如果提供者返回不同的代码,则不会进行第二次尝试。我们相信这是您的情况。
总结一下:
调用服务时,将完成以下操作:
- 将在不发送凭据的情况下发出请求。
- 服务器使用以下类型的标头响应错误 401:授权:基本 dXNlcjpwYXNz。
- 执行第二个请求,现在使用凭据。授权标头与授权一起使用:基本 dXNlcjpwYXNz
- 服务器对用户进行身份验证并使用 Http 代码 200 进行响应。
解决方法:
为了发送 Authorization 标头,您可能需要通过为每个重要的服务包含特定过程并替换您的 ExternalObject 来使用 httpclient。
您将在下面找到示例:
事件'TestHTTP'
&HTTPClient.Host = "本地主机"
&HTTPClient.Port = 8089
&HTTPClient.BaseURL = "/version8JavaEnvironment/servlet/"
&HTTPClient.AddHeader("Content-type", "text/xml;charset=utf-8")
&HTTPClient.AddHeader("SOAPAction", "version8action/ASERVICEPROVIDER.Execute")
&HTTPClient.AddHeader("授权", "pppppppppppppppppppppppppp")
&XMLWriter.OpenRequest(&HTTPClient)
&XMLWriter.WriteStartDocument("utf-8", 0)
&XMLWriter.WriteStartElement("SOAP-ENVEnvelope")
&XMLWriter.WriteAttribute("xmlnsSOAP-ENV",http//schemas.xmlsoap.org/soap/envelope/")
&XMLWriter.WriteAttribute("xmlnsxsd", "http//www.w3.org/2001/XMLSchema")
&XMLWriter.WriteAttribute("xmlnsSOAP-ENC",http//schemas.xmlsoap.org/soap/encoding/")
&XMLWriter.WriteAttribute("xmlnsxsi", "http//www.w3.org/2001/XMLSchema-instance")
&XMLWriter.WriteStartElement("SOAP-ENVBody")
&XMLWriter.WriteElement("ServiceProvider.Execute", "")
&XMLWriter.WriteAttribute("xmlns", "version8")
&XMLWriter.WriteEndElement()
&XMLWriter.Close()
&HTTPClient.Execute("POST", "targetResourceName")
&longvarchar = &HTTPClient.ToString()
结束事件