• BizTalk调用WS-Security的web services


    最近做个项目,biztalkOTMOracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk调用OTMweb services

    OTM的云服务,仅支持WS-SecurityUsername Token验证方式。

    所以需要使用UsernameToken Web Service Security Policy,并使用HTTPS加密此SOAP消息的传输。

      OTM发布的web services是基于java的,也就是说这也是个biztalk调用的java开发的基于WS-Security的web services的例子。

     

     

    https的请求内容格式如下:

    POST https://URL HTTP/1.1

    Content-Type: text/xml; charset=utf-8

    SOAPAction: "process"

    Host: host

    Content-Length: 6115

    Expect: 100-continue

    Accept-Encoding: gzip, deflate

    Connection: Keep-Alive

     

    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

        <env:Header>

            <ns1:Security>

                <ns1:UsernameToken>

                    <ns1:Username>GUEST.ADMIN</ns1:Username>

                    <ns1:Password>CHANGEME</ns1:Password>

                </ns1:UsernameToken>

            </ns1:Security>

        </env:Header>

        <env:Body>

            ...your message content goes here...

        </env:Body>

    </env:Envelope>

     

    1. 引用OTMweb services

    VSBizTalk project中使用ADDàAdd Generated Items… à Consume WCF Service

    引用OTMweb services提供的wsdl URL:

    WSDL包括相应的xsd文件能够获取到,点击下一步就会出错:

    试过N多次,在这一步死活就是过不去,引用不成功,只能理解为双方兼容性问题。

     

    引用在线的wsdl不成功,就试试引用wsdl文件。使用svcutil.exe工具根据web

    Services提供的wsdlURL生成wsdl和相应的xsd文件:

     

    可以看到生成了两个文件:xmlns.oracle.com.apps.otm.IntXmlService.wsdlxmlns.oracle.com.apps.otm.xsd,这就是biztalk引用文件wsdl的原料了。

    再在VSBizTalk project中使用ADDàAdd Generated Items… à Consume WCF Service,这次选Metadata File

    下一步:

    选择前面生成的两个文件,一个wsdl文件,一个xsd文件。结果还是出错:

     

    wsdl文件和xsd合并成一个文件再试。

    查看wsdl文件如下:

     

    xmlns.oracle.com.apps.otm.xsd的内容整个的替换掉红框内的内容,把两个文件合并为一个wsdl文件,在bizitalk project再次引用成功,生成三个文件:

     

    1. 部署BizTalk项目测试

    部署这个BizTalk项目后,在biztalk application中导入端口的绑定文件:IntXmlService.BindingInfo.xml,可以看到这是一个WCF-Custom发送端口:

    点击这个端口的"Configure…":

    Bingding标签的内容:

    设置好对方提供的用户名和密码:

     

    设置一个接收端口从一个文件夹接收测试文件,这个发送端口设置Filter订阅这个接收端口,然后再设置一个发送端口订阅这个发送端口返回的消息写到一个文件夹,这个具体过程就不详细描述了。

     

    开始测试,将一个从xsd schema生成的消息实例发送给对方,使用Fiddler截取发送和返回的消息看。

    截取到的发送出去的消息是这样的:

    截取到的返回的消息是这样的:

     

    很明显,对方返回的消息说安全验证错误。

    查看发送出去的消息里面,发现在Envelope里没有Header,就没有把Username Token发送给对方。

    仔细检查WCF-Custom发送端口的配置,发现缺少Security的配置。

    在发送端口的Binding标签中增加Security Extension

    security移到最上面的位置,然后设置authenticationModeUserNameOverTransport,把enableUnsecuredResponse设置为True

    再测试,使用Fiddler截取发送和返回的消息看。

    截取到的发送出去的消息是这样的:

    可以看到,Envelope中的Header有了,UsernameToken也有了。

    截取到的返回的消息是这样的:

     

    可以看到,这个就是对方的正常回应消息了。

     

  • 相关阅读:
    在CentOS7 安装 Redis数据库
    Gulp-构建工具 相关内容整理
    Mac中设置Sublime快速在终端中使用命令打开项目
    CentOS 7.6出现SSH登录失败的解决方法
    使用 Vagrant + VirtualBox 快速构建 CentOS 下的 Docker 环境
    平凡的世界
    EBR内容解析
    MBR内容解析
    使用vbs给PPT(包括公式)去背景
    Ubuntu 14.04 LTS 初装成
  • 原文地址:https://www.cnblogs.com/chnking/p/6166121.html
Copyright © 2020-2023  润新知