Как получить refresh_token с помощью Box Connector в Mule

Я использую версию коннектора Box 3.0.0.201609092037 (последнюю), так как не нашел никакой документации или примера кода для получения маркера обновления. Я написал собственный процесс для его получения. .

Я выполняю действие авторизации с помощью соединителя, а затем хочу отправить запрос в Box API по этому URL-адресу: https://api.box.com/oauth2/token, чтобы получить access_token, а также refresh_token (информацию об API я получил отсюда https://docs.box.com)./reference#token).

Проблема в том, что как только мой поток был авторизован, и я получил код доступа, и я использую его для отправки в Box, я всегда получаю это:

{
  "error": "invalid_grant",
  "error_description": "The authorization code has expired"
}

Я проверил всю информацию, и я полагаю, что это хорошо, ответ, который я ожидаю:

{
    "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl",
    "expires_in": 3600,
    "restricted_to": [],
    "token_type": "bearer",
    "refresh_token": "J7rxTiWOHMoSC1isKZKBZWizoRXjkQzig5C6jFgCVJ9bUnsUfGMinKBDLZWP9BgR"
}

Таким образом, я смогу сохранить эти свойства и обновить токен, если это необходимо.

Вот как выглядит мой поток:

введите описание изображения здесь

и вот мое определение XML:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:tls="http://www.mulesoft.org/schema/mule/tls" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:objectstore="http://www.mulesoft.org/schema/mule/objectstore" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:box="http://www.mulesoft.org/schema/mule/box" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/box http://www.mulesoft.org/schema/mule/box/current/mule-box.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/objectstore http://www.mulesoft.org/schema/mule/objectstore/current/mule-objectstore.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd
http://www.mulesoft.org/schema/mule/tls http://www.mulesoft.org/schema/mule/tls/current/mule-tls.xsd">
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration" protocol="HTTPS">
        <tls:context>
            <tls:key-store type="jks" path="OBKeytore.jks" keyPassword="password" password="password"/>
        </tls:context>
    </http:listener-config>
    <box:config-with-oauth name="Box__OAuth_2_0" clientId="my_client_id" clientSecret="My_secret" doc:name="Box: OAuth 2.0">
        <box:oauth-callback-config domain="localhost" localPort="8081" remotePort="8081" path="callback" connector-ref="HTTP_Listener_Configuration"/>
        <box:oauth-store-config objectStore-ref="_defaultInMemoryObjectStore"/>
    </box:config-with-oauth>
    <objectstore:config name="ObjectStore__Connector" partition="BoxAccessToken"  persistent="true" doc:name="ObjectStore: Connector"/>
    <http:request-config name="HTTP_Request_Configuration" host="api.box.com" port="443" basePath="/oauth2/" doc:name="HTTP Request Configuration" protocol="HTTPS"/>
    <tls:context name="TLS_Context" doc:name="TLS Context">
        <tls:trust-store path="OBKeytore.jks" password="password" type="jks"/>
        <tls:key-store type="jks" path="OBKeystore.jks" keyPassword="password" password="password"/>
    </tls:context>
    <flow name="Authorize">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/authorize" doc:name="HTTP"/>
        <box:authorize config-ref="Box__OAuth_2_0" doc:name="Box"/>
        <flow-ref name="GenerateAcessToken" doc:name="GenerateAcessToken"/>
    </flow>
    <flow name="GenerateAcessToken">
        <logger message="Acess Token: #[flowVars['_oauthVerifier']]" level="INFO" doc:name="Logger"/>
        <set-payload value="#[[
    'grant_type' :'authorization_code',
    'code':flowVars['_oauthVerifier'],
    'client_id':'my_client_id',
    'client_secret':'my_secret'
]]" doc:name="Set Payload"/>
        <http:request config-ref="HTTP_Request_Configuration" path="token" method="POST" doc:name="HTTP">
            <http:success-status-code-validator values="200,400"/>
        </http:request>
        <object-to-string-transformer doc:name="Object to String"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <catch-exception-strategy doc:name="Catch Exception Strategy">
            <object-to-string-transformer doc:name="Object to String"/>
            <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        </catch-exception-strategy>
    </flow>
</mule>

Я должен упомянуть, что я уже пытался использовать POSTMAN с теми же параметрами, заменив код (насколько я знаю, он действителен в течение 30 секунд) и получил тот же ответ.

Вот еще информация:

Версия Anypoint Studio: 6.1.1 Среда выполнения сервера: 3.8.1 EE


person Yucel    schedule 11.10.2016    source источник


Ответы (1)


Похоже, что может потребоваться конфигурация авторизации OAuth запрашивающей стороны HTTP, как описано для сервера Mule, пытающегося получить доступ к ресурсам, принадлежащим пользователю Box и хранящимся на сервере Box: https://docs.mulesoft.com/mule-user-guide/v/3.8/authentication-in-http-requests

http://mulesoft.github.io/box-connector/3.0.0/apidocs/box-apidoc.html#_oauth_2_0_server_to_server и этот пример управления токенами OAuth, который использует Box в качестве примера, возможно, стоит посмотреть, если вы еще не видел это.

person catpaws    schedule 18.10.2016
comment
Кажется, что в первый раз вам действительно нужно авторизовать приложение, но позже соединитель Mule обрабатывает токен каждый раз, когда это необходимо, и пока вы не перезапустите приложение, вы можете работать без проблем. Спасибо @catpaws. - person Yucel; 03.05.2017