【问题标题】:Base64 encoding in an Apigee Edge policyApigee Edge 政策中的 Base64 编码
【发布时间】:2014-01-30 03:56:09
【问题描述】:

在 Apigee 政策中进行 Base64 编码的最简单方法是什么?我需要对要以编程方式发送的 SMS 文本进行编码。

我知道我可以明确地包含代码,但我更喜欢使用内置的功能(如果可用)。

【问题讨论】:

    标签: apigee


    【解决方案1】:

    最有效的方法是创建一个python script policy,然后使用python's built-in base64 模块构建一个简单的函数,对参数进行base64编码或解码。

    如果您从此处获取示例代理:http://apigee.com/docs/api-services/content/api-proxy-samples,您将在 /simpleProxy/apiproxy/resources/py 中找到一个 python 示例。

    策略 XML 是这样的:

    <Script name="Script-GenerateAuthHeader">
      <ResourceURL>py://Authheader.py</ResourceURL>
    </Script>
    

    python 代码如下所示:

    import base64
    
    username = flow.getVariable("request.formparam.client_id")
    password = flow.getVariable("request.formparam.client_secret")
    
    base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
    
    flow.setVariable("my.base64.blob", base64string)
    

    或者,如果 python 不是你的风格,you could do this in javascript 使用 js 资源,甚至直接在 Node.js proxy 中。

    【讨论】:

    • 在 python 中绝对是最简单的。
    • @Cheeso 你也有这样的例子吗? :)
    • 是的,我在此处附加了它。
    【解决方案2】:

    目前没有内置简单地注入 HTTP Basic Auth 标头或生成字符串的 base64 编码的功能。

    您可以使用 Javascript 标注来做到这一点,就像这样。

    政策 XML:

    <Javascript name='JavaScript-SetAuthz'>
      <ResourceURL>jsc://nameOfTheJavaScriptFileHere.js</ResourceURL>
    </Javascript>
    

    the JavaScript

    【讨论】:

      【解决方案3】:

      -- 缺乏评论的声誉(这样的耻辱)所以添加一个答案--

      由于您专门询问了编码文本而不是二进制内容,因此您可以通过使用 b64encode 而不是 encodestring 对 Cheeso 的答案进行小幅改进:

      base64string = base64.b64encode('%s:%s' % (username, password))
      

      这在我的测试中也快了一点。

      【讨论】:

        【解决方案4】:

        我们还添加了一个示例来展示如何在 JavaScript 中执行此操作:

        https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/base64encoder

        【讨论】:

        • 这行得通。当手动将其合并到现有的 Api-Proxy 中时,我必须上传脚本enc-utf16-min.js, enc-base64-min.js, core-min.js,方法是将每个脚本附加到我后来删除的 javascript 策略中......但不是在我的实际 javascript 中添加 &lt;IncludeURL&gt; 标签之前需要像这样引用它们的策略:github.com/apigee/api-platform-samples/blob/master/…
        【解决方案5】:

        现在 Apigee 中内置了更新的功能 - 消息模板中内置了 encodeBase64 和 decodeBase64。有关更多详细信息,请参阅: https://docs.apigee.com/api-platform/reference/message-template-intro#base64-encoding-functions

        【讨论】:

          猜你喜欢
          • 2014-03-07
          • 1970-01-01
          • 2023-04-09
          • 2022-07-11
          • 2020-09-06
          • 1970-01-01
          • 2014-01-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多