Как передать токен авторизации CKAN API через WSO2-API Manager - PullRequest
0 голосов
/ 10 января 2020

Я использую WSO2 API Manager (версия 3.0.1) в качестве внешнего интерфейса для доступа к данным через вызов API для CKAN (версия 2.8.2).

Для частного набора данных CKAN требуется токен авторизации как описано здесь .

"При вызове функции API, требующей авторизации, вы должны аутентифицировать себя, предоставив свой ключ API вместе с HTTP-запросом."

CKAN API authorization instructions

Как это достигается в WSO2? В частности, какие конфигурационные файлы / настройки необходимо изменить, чтобы это произошло?

Я вижу из этой документации , что если конфигурироваться в Eclipse с использованием подключаемого модуля инструментов, это может быть выполнено с помощью чего-то вроде это (шаг 23):

curl -k -H "Authorization: Bearer api-key-for-WSO2-goes-here" -H "Custom: Bearer api-key-for-CKAN-goes-here" https://my-wso2-host-goes-here:8243/test/1.0.0

WSO2 curl example

Тем не менее, эти инструкции требуют использования Eclipse. Но как это можно сделать без Eclipse? Т.е. какие файлы конфигурации / настройки необходимо изменить на сервере или в WSO2 API Publisher и / или WSO2 API Dev Portal для передачи токена авторизации для CKAN через WSO2 API-M?

Ответы [ 2 ]

1 голос
/ 10 января 2020

Вам не нужно использовать Eclipse для этого. В учебнике плагин Eclispse используется в качестве инструмента для легкого создания последовательности. В этом уроке нам прежде всего нужна была последовательность, потому что заголовок авторизации, требуемый бэкэндом, - это «Авторизация». В WSO2 APIM это зарезервированный заголовок для передачи внутренне сгенерированного токена. Поэтому сначала мы передаем токен бэкенда в пользовательский заголовок с другим именем заголовка, а затем копируем это значение в заголовок авторизации в последовательности. Последовательность будет выглядеть ниже.

<sequence xmlns="http://ws.apache.org/ns/synapse" name="authorization_header_exchange">
<property name="X-Authorization" expression="get-property('transport', 'X-Authorization')" scope="default" type="STRING"/>
<property name="Authorization" expression="get-property('X-Authorization')" scope="transport" type="STRING" description=""/>
<property name="X-Authorization" scope="transport" action="remove"/>

Для получения дополнительной информации см. [1].

Однако в вашем случае вы можете отправить ключ API в X-CKAN-API-Key вместе с запросить себя без использования посреднической последовательности.

[1]. https://docs.wso2.com/display/APICloud/Sample+Mediation+Sequences#SampleMediationSequences -Passinganauthorizationheadertoyourbackend

0 голосов
/ 22 января 2020

Я отвечаю на свой вопрос ...

TLDR

Ответ от @naoko выше верен: пройти авторизацию CKAN через WSO2 API-M включите X-CKAN-API-Key в качестве заголовка со значением, установленным для личного ключа CKAN API вашего пользователя CKAN.

Длинная версия

Передайте ключ API CKAN следующим образом:

curl -k -H "Authorization: Bearer wso2-app-key-here" -H "X-CKAN-API-Key: ckan-authorization-key-here" https://myWso2DeveloperPortal.com:8243/daas/3.0.1/action/resource_show?id=resource-id-of-CKAN-dataset-here

(используйте -k, если хост имеет самозаверяющий сертификат https)

Где ...

  • wso2-app-key-here - это ключ приложения, найденный на портале разработчиков WSO2.
  • ckan-authorization-key-here - это закрытый ключ вашей учетной записи пользователя в CKAN. (Его можно найти на странице вашего профиля пользователя в пользовательском интерфейсе CKAN.)
  • resource-id-of-CKAN-dataset-here - это идентификатор ресурса набора данных, который вы хотите запросить.

Метод resource_show в этом примере возвращает метаданные для данного ресурса CKAN. Другие методы CKAN вызываются аналогичным образом.

Это все благодаря CKAN за альтернативу передаче ключа в заголовке с именем Authorize. В случае CKAN можно использовать переменную X-CKAN-API-Key. И это может быть легко передано, как показано выше.

Mea culpa за то, что я не поймал это в документах CKAN в первую очередь (это прямо там, на моем собственном скриншоте выше!) ... если бы я внимательно прочитал это сохранил бы сообщение SO к лучшему или худшему;)

Если бы CKAN не предоставил альтернативу с X-CKAN-API-Key, то это можно сделать в версии 3.0.0, как описано на этих страницах:

«Передача пользовательского токена авторизации в бэкэнд»

https://apim.docs.wso2.com/en/latest/Learn/APIGateway/MessageMediation/passing-a-custom-authorization-token-to-the-backend/

FWIW, я на самом деле пробовал это перед тем, как попробовать решение X-CKAN-API-Key и его не работал Может я что-то не так делаю Но так как решение X-CKAN-API-Key работает для меня, я называю его готовым.

...