【问题标题】:How to write SOAP Authentication header with Ruby Savon如何使用 Ruby Savon 编写 SOAP 身份验证标头
【发布时间】:2013-10-09 23:10:50
【问题描述】:

我是第一次调用基于 SOAP 的 API,我从文档中获得了以下信息:

在您的客户端中,按如下方式构造您的授权标头:

1 连接用户名和密码,例如: 示例用户名:示例密码

2 以 base 64 编码字符串,例如: RXhhbXBsZVVzZXJOYW1lOkV4YW1wbGVQYXNzd29yZA==

3 在您的代码中,输入值为 Basic 的 Authorization 标头。

带有编码的用户名和密码的示例 Web 服务标头

POST https://api.five9.com/wsadmin/AdminWebServiceHTTP/1.1

接受编码:gzip,deflate

内容类型:text/xml;charset=UTF-8

SOAPAction: ""

授权:基本 RXhhbXBsZVVzZXJOYW1lOkV4YW1wbGVQYXNzd29yZA==

我正在使用 Savon gem 拨打电话。鉴于上述信息,我将如何使用 Ruby 1.9.3 和 Savon gem 验证 API 调用 api_call

这是我用来设置 WSDL 或 client

client = Savon.client(wsdl: "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl&user=luigi@apitest.com")

【问题讨论】:

    标签: ruby api soap savon


    【解决方案1】:

    您需要在消息的 SOAP 标头中包含身份验证凭据。 Savon 为其提供了 :soap_header 符号。

    您的示例可能如下所示:

    require 'savon'
    require 'securerandom'
    
    realm = Base64.strict_encode64("ExampleUsername:ExamplePassword")
    client = Savon.client(
        wsdl: "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl",
        soap_header: { 'Authorization:' => "Basic #{realm}"},
        log: true,
        log_level: debug,
        pretty_print_xml: true
    )
    

    我无法在这个示例中对其进行测试,因为我缺少用户凭据,但它通过了“ruby -c”。

    【讨论】:

    • 感谢您的提示。这是有道理的,并按预期生成调用。
    • 在 savon v2 中我不得不使用新语法:basic_auth: ["username", "password"],
    • 我认为最初的问题是,basic_auth 出于某种原因无法正常工作。因此,我们不得不退回到 http 标头的原始编码。
    • @house9 谢谢,您的解决方案有效。你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多