2016-10-11 12 views
0

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

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

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

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

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

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

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

Вот как мой поток выглядит следующим образом:

enter image description here

и вот мое определение 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> 

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

Вот некоторая более подробная информация:

AnyPoint Studio Версия: 6.1.1 сервера Runtime: 3.8.1 EE

ответ

1

Это звучит как конфигурация авторизации OAuth в HTTP запрашивающего может потребоваться, как описано для Mule сервер пытается получить доступ к ресурсам, которые принадлежат пользователю ящик, и удерживаются на сервере 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 и это example of managing OAuth tokens, который использует Box в качестве примера может быть стоит посмотреть, если вы еще не видели.

+0

Кажется, что в первый раз вам действительно нужно авторизовать приложение, но позже соединитель Mule коннектора обновит токен каждый раз по мере необходимости, так как вы не перезагружаете приложение, вы можете работать без проблем. Спасибо @catpaws. – Edgar