在c ++ WWSAPI Web服务中处理WS-Security PasswordDigest模式

问题描述 投票:1回答:1

我继承了使用WWSAPI用c ++编写的现有且有效的Web服务。我必须在soap标头中使用passworddigest实现基于WS-Security的安全机制,如下所示:

   <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-5094D0E1418B986BF215754539660332">
        <wsse:Username>test</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">sqPh/Bap7ER6j+n+2iYlI+4Qt9A=</wsse:Password>
        <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">1ROYkV/ZftvGi17KmsvgnQ==</wsse:Nonce>
        <wsu:Created>2019-12-04T10:06:06.032Z</wsu:Created>
     </wsse:UsernameToken>
  </wsse:Security>

我既不是Web服务专家,也不是WWSAPI专家,但我了解Web服务的基础。我试图了解WWSAPI文档,但不了解从何处开始实施此安全性。

我通过使用绑定WS_STRING_USERNAME_MESSAGE_SECURITY_BINDING_TYPE进行了测试,为此我可以定义一个密码验证器回调,该回调似乎可以用于简单的用户/密码方案。但是在哪里/如何定义密码摘要安全性机制?

[使用API​​,我期望有一个简单的设置来定义基本的摘要机制,并希望有一个回调来接收随机数,创建日期,用户名和密码,但是我不知道从哪里开始。我不知道这是否需要简单的声明(绑定+属性+回调),或者是否需要编写一些代码,例如手动解析xml标头。

[有人通过WS-Security实现WWSAAPI Web服务,以及如何实现?

c++ web-services soap ws-security wwsapi
1个回答
0
投票

好吧,似乎没有人可以用纯C ++实现Web服务?无论如何,我找到了答案:这必须(通常)手动完成。要点是:

  • 必须在WS_SERVICE_POINT结构中定义授权回调
  • 必须通过以下操作在此回调中读取并检查WS-security标头:
  • 通过WsGetOperationContextProperty函数和参数WS_OPERATION_CONTEXT_PROPERTY_INPUT_MESSAGE获取输入消息(包含标题和正文)
  • 检查消息状态是否为空(属性WS_MESSAGE_PROPERTY_STATE)
  • 获取头缓冲区(属性WS_MESSAGE_PROPERTY_HEADER_BUFFER)
  • 创建XML阅读器(WsCreateReader)
  • 使用标题缓冲区(WsSetInputToBuffer)初始化此阅读器
  • 解析XML以使用功能WsGetReaderNode查找WS-Security标记(请参阅WWSAPI附带的示例。)>
  • 在找到的属性“ mustUnderstand”的位置调用WsMarkHeaderAsUnderstood
  • 现在已经解析了XML,您可以使用WS-Security标记执行任何所需的操作以验证它们是否有效
  • 在退出授权回调之前,只需将参数* authorized设置为TRUE或FALSE,即可决定是否授权访问。>
© www.soinside.com 2019 - 2024. All rights reserved.