首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在web服务中发现要进行身份验证的绑定配置

如何在web服务中发现要进行身份验证的绑定配置
EN

Stack Overflow用户
提问于 2012-12-14 17:01:04
回答 2查看 3.1K关注 0票数 2

在Visual 2010中,我创建了一个客户端来使用web服务,使用WSDL自动创建代理类。在开发环境中,这是可以的,因为它不需要在这个环境中进行身份验证。

我遇到的问题是,在测试和生产环境(真正的工作环境)中,服务具有身份验证。WSDL没有描述它。它们都使用相同的开发环境WSDL。

如果我尝试使用浏览器在测试环境中查看WSDL,将"?WSDL“放在端点地址之后,它就不会像开发环境那样返回WSDL。它返回一个身份验证表单,一个普通的html,在通知用户和密码之后,它返回WSDL (与开发环境相同)。

我做了这样的app.config绑定信任:

代码语言:javascript
复制
<wsHttpBinding>
          <binding name="WebServiceSoapAuth" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"  maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Mtom" textEncoding="utf-8"  useDefaultWebProxy="true">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
            <security mode="None">
              <transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>
              <message clientCredentialType="UserName" algorithmSuite="Default"/>
            </security>
          </binding>  
        </wsHttpBinding>

如果我使用VS 2010自动创建的basicHttpBinding (在dev环境中工作),我的服务使用者将返回“无法进行身份验证或授权的安全令牌”,正如预期的那样。

更改为wsHttpBinding (上面的代码),它返回“响应消息的内容类型text/ html;charset=utf-8不匹配绑定的内容类型(application/soap+xml;charset=utf-8)。如果使用自定义编码器,请确保正确实现IsContentTypeSupported方法。响应的前1024字节是:”后面是表单身份验证html代码。

我不知道我必须使用什么绑定配置。

我使用SoapUI测试了服务消耗,并且在这两种环境中都可以工作,并且它使用身份验证工作,我只需要通知用户、密码,并且需要将“WSS-密码类型”请求配置更改为"PasswordText“(只通知用户和密码,我有”无法验证或授权的安全令牌“返回)。

很抱歉,我的英语不好,我不流利,如果我在问题类别或格式上犯了什么错误。

编辑:--我无法通过身份验证在环境中可视化文件。当我把地址跟在wsdl后面时,它给了我一个验证表单(一个来自集成InterSystems软件的表单),而不是wsdl。

--我使用SoapUI测试了服务消耗,并在这两种环境中都工作,并且对它使用了身份验证,我只需通知用户、密码,并且需要将“WSS-密码类型”请求配置更改为"PasswordText“(只通知用户和密码,我有”安全令牌无法通过身份验证或授权“的返回)。

为什么它不使用自动生成的类,只是通知用户和传递?有人有主意吗?什么绑定配置等效于SoapUI配置的“WSS-密码类型”等于"PasswordText"?(我想这就是为什么它不起作用的关键,如果我只是通知用户和密码)

编辑2:soap消息的正文没有问题。我在做头球有困难。可能是这样的:

<soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:UsernameToken wsu:Id="UsernameToken-5"> <wsse:Username>USERNAME</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">E1XqZ2v8IDaTBzfF3j/TOA==</wsse:Nonce> <wsu:Created>2012-12-21T12:24:23.380Z</wsu:Created> </wsse:UsernameToken> </wsse:Security> </soapenv:Header>

正如我告诉过的,我不能访问服务器,它是在我的客户那里。我只知道它是用java制造的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-04 16:54:15

我必须手动发出一个http xml请求,并且必须手动创建xml并将其传递给request。postData变量来自手动创建的xml。

代码语言:javascript
复制
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
    Dim req As HttpWebRequest = DirectCast(WebRequest.Create("http://site.customer/ens/qa/customer.bs.ws.service.cls"), HttpWebRequest)
    req.Method() = "POST"
    req.UserAgent = "Apache-HttpClient/4.1.1 (java 1.5)"
    req.ContentType = "text/xml;charset=UTF-8"
    req.ContentLength = byteArray.Length
    req.KeepAlive = True
    req.Host = "site.customer"
    req.AutomaticDecompression = 3
    req.Headers.Add("SOAPAction", "http://www.tempuri.org/customer.bs.ws.service.function")
票数 0
EN

Stack Overflow用户

发布于 2012-12-14 18:14:06

首先,您应该检查客户端是否使用与服务器相同的绑定。例如,如果您的客户端使用wsHttpBinding,但指向一个使用basicHttpBinding的服务,那么它几乎在所有情况下都会出错。

其次,您将安全模式设置为none,这意味着它不会使用传输或消息安全,我认为这不是您想要的。如果你想用

代码语言:javascript
复制
<transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>

代码语言:javascript
复制
<message clientCredentialType="UserName" algorithmSuite="Default"/>

然后,您应该将安全模式设置为TransportWithMessageCredential。这将使用HTTPS的传输安全性和用于身份验证的消息安全性。其他安全模式将只使用其中一个clientCredentialType (传输将使用传输clientCredentialType,消息将使用消息clientCredentialType)。

希望这有帮助:)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13883082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档