- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要从 Wix.com 平台上的 Node 服务器与soap:xml API 进行通信。该 API 需要 Soap WSSE 身份验证。
我可以向 SoapUI 中的端点发送经过身份验证的请求,但未能在 Wix Node 平台上成功执行此操作。
Wix 仅具有可安装的 Node 包子集,并且 XMLHttpRequest 在其环境中不可用。
我尝试过node-soap,但收到错误,表明该包在 Wix Node 平台上可能存在错误。
我发现自己使用 Node “请求”( https://www.npmjs.com/package/request ) 包并尝试推出自己的解决方案来解决缺少的 Node 包和环境限制。
目前我可以向端点发送请求,但是我收到以下响应;
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Client</faultcode><faultstring>Access denied</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>\n
这表明我没有正确进行身份验证。
正如我所提到的,我已经能够通过 SoapUI 成功发送请求并接收预期响应。所以 API 正在运行,我怀疑是我的实现出了问题。老实说,我过去曾使用过 REST/JSON API,自从我使用 SOAP API 以来已经有很长一段时间了,我记得当时就感到非常痛苦!
我的请求代码
import request from 'request';
import {wsseHeaderAssoc} from 'backend/wsse';
export function getLocationID() {
let apiUsername = "username";
let apiPassword = "password";
let apiURL = "https://api.serviceprovider.com/wsdl";
// WSSE authentication header vars
let wsse = wsseHeaderAssoc(apiUsername, apiPassword);
let wsseUsername = wsse["Username"];
let wssePasswordDigest = wsse["PasswordDigest"];
let wsseCreated = wsse["Created"];
let wsseNonce = wsse["Nonce"];
let xml =
`<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:masked:api">`+
`<soapenv:Header>`+
`<wsse:Security 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-19834957983507345987345987345">`+
`<wsse:Username>${wsseUsername}</wsse:Username>`+
`<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">${wssePasswordDigest}</wsse:Password>`+
`<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">${wsseNonce}</wsse:Nonce>`+
`<wsu:Created>${wsseCreated}</wsu:Created>`+
`</wsse:UsernameToken>`+
`</wsse:Security>`+
`</soapenv:Header>`+
`<soapenv:Body>`+
...
`</soapenv:Body>`+
`</soapenv:Envelope>`
var options = {
url: apiURL,
method: 'POST',
body: xml,
headers: {
'Content-Type':'text/xml;charset=utf-8',
'Accept-Encoding': 'gzip,deflate',
'Content-Length':xml.length,
'SOAPAction':"https://api.serviceprovider.com/wsdl/service",
'User-Agent':"Apache-HttpClient/4.1.1 (java 1.5)",
'Connection':"Keep-Alive"
}
};
let callback = (error, response, body) => {
if (!error && response.statusCode == 200) {
console.log('Raw result ', response);
// If you ever get this working, do some mad magic here
};
console.log('Error ', response);
};
}
我正在使用 wsse-js ( https://github.com/vrruiz/wsse-js/blob/master/wsse.js ) 生成密码摘要、创建日期时间戳和 Nonce,因为 Node wsse 包 ( https://www.npmjs.com/package/wsse ) 在 Wix 上不可用。我已经阅读了代码,并且根据我在其他地方读到的内容,这看起来是一个很好的实现。
我做了一个小补充,以在关联数组中返回生成的详细信息;
export function wsseHeaderAssoc(Username, Password) {
var w = wsse(Password);
var wsseAssoc = [];
wsseAssoc["Username"] = Username;
wsseAssoc["PasswordDigest"] = w[2];
wsseAssoc["Created"] = w[1];
wsseAssoc["Nonce"] = w[0];
return wsseAssoc;
}
如前所述,我收到的回复是:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Client</faultcode><faultstring>Access denied</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>\n
我期待一个有效的 SOAP XML 响应。
我使用了 SoapUI 中的原始 xml 结构和 header 来构建它,一切看起来都很好,我真的不知道哪里出了问题。
我希望任何人都可以向我提出任何建议 - 我已经花了 2 天时间尝试暴力破解,我需要帮助。
最佳答案
您可以使用soap 包中的WSSecurity
方法。他们的自述文件中的一个示例:
var options = {
hasNonce: true,
actor: 'actor'
};
var wsSecurity = new soap.WSSecurity('username', 'password', options)
client.setSecurity(wsSecurity);
关于javascript - 如何: wsse soap request in javascript (node),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57113648/
我们可以通过添加 key 存储、传出 WS-安全配置(时间戳、用户名和签名)以及用户 token 、时间戳主体的命名空间来从 SOAP UI 工具调用 Web 服务,然后应用传出 wss -> 应用“
我目前正在研究 WSSE 协议(protocol)以保护我的 api。 我已经理解了基础,并且头脑清晰。 但是我遇到了一个问题。 假设我想生成一个一次性摘要,我必须连接时间戳、随机数和 secret
我正尝试按照 symfony 说明书 Symfony Link 给出的步骤使用 wsse 创建身份验证提供程序.但是我遇到了一个我一直试图解决的意外错误(已经 3 天了)。 这是我的错误: Inval
我正在使用 IBM JAX-RPC/JAX-WS 创建 Web 服务。我正在尝试实现 wsse 安全性,但无法找出实现相同目标的确切步骤。我将为此 Web 服务使用 RSA 7.5 和 Websphe
我正在使用CXF 3.1.5,尝试将请求发送到STS服务器,即STS strong>服务器有一个策略,相关部分如下 因此,在发送到 STS 服务器的请求 CXF 中,签名 ke
我最近一直在为 WSS 服务编写客户端。它根据其文档使用 usernametoken 配置文件。我已经写了这样的东西作为代码来传达它。但是由于不允许匿名身份验证,我总是面临服务未经授权的错误。 我该如
我正在尝试使用 wcf 通过相互证书进行 SOAP 调用,但还是不断出错 “请求已中止:无法创建 SSL/TLS 安全通道。”或 '远程服务器返回错误:(500) 内部服务器错误缺少 wsse: 请求
我们目前正在重新开发一个遗留项目,该项目使用 Lumesse 的 SOAP 网络服务,通过 HTTPS 调用。 http://developer.lumesse.com/Getting_Started
我了解如何向 SOAP 请求添加 header 。但这会生成一个与我需要传递的不匹配的 header 。返回此 header : CA
我几乎没有使用 SOAP 协议(protocol)的经验。我需要连接到所需 header 的服务。我认为这在 Java 中有点标准,但在 C# 中必须手动创建此 header 。 这里有没有人能够连接
我想将 wsse:security 添加到我的 soap 消息中。这是我的代码: public Document signSoapMessage(SOAPMessage message) {
我在生成 gSOAP 安全 header (WSSE) 时遇到问题。我已经编译了所有必要的文件并使用以下调用将 WSSE 安全 header 添加到请求中: soap_wsse_add_Securit
我构建了一个基于 CXF 的 SOAP Web 服务,并尝试按照本教程的步骤使用 WS-Security 添加一些安全方面的内容。 我收到处理 header 时发现错误 以下是向 SOAP 添加安全方
我需要从 Wix.com 平台上的 Node 服务器与soap:xml API 进行通信。该 API 需要 Soap WSSE 身份验证。 我可以向 SoapUI 中的端点发送经过身份验证的请求,但未
我正在关注 custom authentication provider Symfony 2 的说明书,但我不知道如何生成登录表单或具有正确所需的 WSSE header 的东西,所以我可以将其传递给
我正在尝试通过相应的 wsdl 使用 Web 服务。此服务依赖于符合 Web Services Security Basic Security Profile 1.0 的身份验证包括 http://d
免责声明:.Net N00b 几天来,我一直在用头撞墙,试图让这个外部供应商网络服务的安全工作无济于事。事实证明,他们使用 WSSE 摘要安全性,简而言之,它向 SOAP header 添加了如下内容
当尝试使用 SoapClient 实现 Web 服务时,似乎没有解析 wsdl 链接;尝试创建新的 SoapClient 对象时,请求失败并显示消息: Request failed. Reason:
我需要连接的 Web 服务具有上述要求。我可以在 VS 2008 中使用此 Web 服务,但无法使用它,因为我不知道如何进行身份验证。我需要指定 credentails,但是没有公开“header”方
按照此 http://symfony.com/doc/current/security/custom_authentication_provider.html 结果是 Service "securit
我是一名优秀的程序员,十分优秀!