Mule 3.5 - Google OAuth2示例

时间:2013-07-29 11:52:57

标签: google-api mule google-oauth mule-studio google-api-console

我正在尝试将Mule 3.5连接到Google API(任务,日历等),但我遇到了OAuth2身份验证的各种问题。

有人可以给我一个Mule项目的示例.xml文件,其中包含一个有效的Google OAuth2示例(可能还有Google API控制台中的设置)。

链接也可以。

3 个答案:

答案 0 :(得分:4)

您需要使用创建项目按钮在Google Developer帐户(https://console.developers.google.com/)中创建应用程序。请注意您在Google连接器配置中需要的项目ID。

然后,您需要点击该应用程序,然后转到 API&验证即可。确保您需要的API设置为“ON”状态。在这种情况下,您可能希望打开日历以及其他任何不需要的东西。请注意,对日历服务的大量调用可能会产生费用或配额限制。

同样在API&在Google开发者控制台左侧的Auth部分,您需要选择凭据。然后点击红色按钮创建新客户ID 。这将为您提供两个关键信息:

  1. 客户端ID - 这将进入Mule
  2. 中Google连接器中的“consumerKey”
  3. 客户端秘密 - 这将进入骡子中的“consumerSecret” 连接器
  4. 设置的另一个重要事项是重定向URI。这需要像:

    http://localhost:8081/oauth2callback
    

    这需要与您在连接器配置中添加的内容相匹配。如果您在防火墙后面运行Mule服务器,则需要配置代理等内容,以便此回调可以到达您的服务器。

    这是一个粗略的例子,我已经设法开始工作。请务必根据需要替换clientID clientSecret和应用程序名称。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns:json="http://www.mulesoft.org/schema/mule/json"
      xmlns:https="http://www.mulesoft.org/schema/mule/https"
          xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
      xmlns:objectstore="http://www.mulesoft.org/schema/mule/objectstore"
      xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns:google-calendars="http://www.mulesoft.org/schema/mule/google-calendars"
      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" version="EE-3.4.1"
      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/google-calendars 
              http://www.mulesoft.org/schema/mule/google-calendars/1.0/mule-google-calendars.xsd
              http://www.mulesoft.org/schema/mule/objectstore 
              http://www.mulesoft.org/schema/mule/objectstore/1.0/mule-objectstore.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/https 
              http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd
              http://www.mulesoft.org/schema/mule/json 
              http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd">
    
    <!-- The 'consumerKey' is Client ID of you google application
         The 'consumerSecret' is the Client Secret of the google application
         The 'applicationName' is the application name you supplied (or Google created for you) when you created your application
         on the google developer console
        -->
    <google-calendars:config-with-oauth
        name="Google_Calendars"
        consumerKey="replace-with-client-ID"
        consumerSecret="replace-with-client-secret" doc:name="Google Calendars"
        applicationName="replace-with-application-name">
    
        <!-- The values here need to match the redirect URL you authorized for your Google Application
             In this case the callback URL would be http://localhost:8081/ouath2callback
         -->
        <google-calendars:oauth-callback-config
            domain="localhost" localPort="8081" path="oauth2callback" remotePort="8081" />
            </google-calendars:config-with-oauth>
    
    
    <!-- This is the objectstore that stores your Auth key which is used in the second flow -->
    <objectstore:config name="ObjectStore" doc:name="ObjectStore" />
    
    <!-- The first flow is executed when you go to http://localhost:8080/oauth-authorize
         It initiates the Google authentication and if successful gets the auth key and puts it into the object store -->
    <flow name="authorizationAndAuthenticationFlow" doc:name="authorizationAndAuthenticationFlow">
        <http:inbound-endpoint exchange-pattern="request-response"
            host="localhost" port="8080" path="oauth-authorize" doc:name="HTTP" />
        <google-calendars:authorize config-ref="Google_Calendars"
            doc:name="Google Calendars" />
        <!-- Your Auth token is store in the key 'accessTokenId' -->    
        <objectstore:store config-ref="ObjectStore" key="accessTokenId"
            value-ref="#[flowVars['OAuthAccessTokenId']]" overwrite="true"
            doc:name="ObjectStore" />
    </flow>
    
    <!-- This flow can be called after the authentication is complete. It uses the previously stored token and to retreive your
         Calendars and return them as JSON -->
    <flow name="getInformationFromCalendar" doc:name="getInformationFromCalendar">
        <http:inbound-endpoint exchange-pattern="request-response"
            host="localhost" port="8081" doc:name="HTTP" />
    
        <!-- The enricher adds the access token to your message -->
        <enricher target="#[flowVars['accessTokenId']]" doc:name="Message Enricher">
            <objectstore:retrieve config-ref="ObjectStore"
                key="accessTokenId" defaultValue-ref="#['']" doc:name="Get AccessToken" />
        </enricher>
        <expression-filter expression="#[flowVars['accessTokenId'] != '']"
            doc:name="Is Access Token Set" />
    
        <!-- gets your first 200 calendars using the accessToken that you enriched the message with-->
        <google-calendars:get-calendar-list
            config-ref="Google_Calendars" maxResults="200"
            pageToken="#[flowVars['GoogleCalendar_NEXT_PAGE_TOKEN']]" doc:name="Google Calendars"
            accessTokenId="#[flowVars['accessTokenId']]" />
        <json:object-to-json-transformer
            doc:name="Object to JSON" />
    </flow>
    
    </mule>
    

答案 1 :(得分:1)

Google Connectors Suite for Mule有一个完整的示例,包括Mule XML configuration

答案 2 :(得分:0)

我们已经发布了how to use OAuth connectors的文档。如果它有用,请告诉我们。