Кодировка Base64 в политике Apigee Edge

Какой самый простой способ сделать кодировку Base64 в политике Apigee? Мне нужно закодировать текст SMS для отправки программно.

Я знаю, что мог бы включить код явно, но я бы предпочел использовать встроенную возможность, если она доступна.


person ApiRhys    schedule 11.01.2014    source источник


Ответы (4)


Самый эффективный способ добиться этого — создать политику сценариев Python., затем используйте встроенный модуль base64 Python для создания простая функция, которая base64-кодирует или -декодирует аргумент.

Если вы возьмете примеры прокси отсюда: http://apigee.com/docs/api-services/content/api-proxy-samples вы найдете пример Python в /simpleProxy/apiproxy/resources/py.

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 не ваш стиль, вы можете сделать это в javascript, используя ресурс js или даже непосредственно в прокси Node.js.

person brandonscript    schedule 11.01.2014
comment
Определенно проще всего в питоне. - person Cheeso; 15.01.2014
comment
@Cheeso, у тебя тоже есть пример для этого? :) - person brandonscript; 15.01.2014
comment
Да, я добавил это здесь. - person Cheeso; 15.01.2014

Возможность просто внедрить заголовок HTTP Basic Auth или сгенерировать кодировку строки base64 в настоящее время не встроена.

Вы можете сделать это с помощью выноски Javascript, например.

XML политики:

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

и JavaScript

person Cheeso    schedule 15.01.2014

Мы также добавили пример, который показывает, как это сделать в JavaScript:

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

person ap-andrew    schedule 17.03.2014
comment
Это работает. При работе над включением его в существующий Api-Proxy вручную мне пришлось загрузить сценарии enc-utf16-min.js, enc-base64-min.js, core-min.js, прикрепив каждый из них к политике javascript, которую я позже удалил... но не раньше добавления тегов <IncludeURL> в мою реальную политику javascript, которая должна была ссылайтесь на них следующим образом: >github.com/apigee/api-platform-samples/blob/master/ - person pulkitsinghal; 17.04.2014

-- Не хватает репутации, чтобы комментировать (такой позор), поэтому добавление ответа --

Поскольку вы спросили конкретно о кодировании текста, а не двоичного содержимого, вы можете внести небольшое улучшение в ответ Cheeso, используя b64encode вместо encodestring:

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

Это также немного быстрее в моем тестировании.

person carloseberhardt    schedule 16.01.2014