google-api - Mule 3.5 - 谷歌 OAuth2 示例

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

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

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

链接也可以。

最佳答案

您需要使用“创建项目”按钮在您的 Google 开发者帐户 ( https://console.developers.google.com/ ) 中创建一个应用程序。记下您的项目 ID,您将在 Google 连接器配置中需要该 ID。

然后,您需要单击该应用程序并转到API 和身份验证。确保您需要的 API 设置为“ON”状态。在这种情况下,您可能想要打开日历并关闭其他任何不需要的内容。请注意,大量调用日历服务可能会产生费用或配额限制。

此外,在 Google 开发者控制台左侧的 API 和身份验证部分下,您需要选择凭据。然后点击红色按钮创建新的客户端ID。这将为您提供两条关键信息:

  1. 客户端 ID - 这会进入 Mule 中 Google 连接器中的“consumerKey”
  2. 客户端 secret - 这会进入您在 Mule 中的“consumerSecret” 连接器

另一个需要设置的重要事项是重定向 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>

关于google-api - Mule 3.5 - 谷歌 OAuth2 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923309/

相关文章:

php - 是否可以从我客户的网站获取数据?

javascript - Mulesoft 项目使用react

google-bigquery - 使用服务帐户通过 API 从 BigQuery 中基于 Google 表格的表中查询数据

multithreading - Mule:使用 doThreading ="false"负载下的线程数

java - Mule originalFilename 为空

ruby-on-rails - 使用 Garb 获取 Google Analytics 配置文件

perl - 谷歌 API OAuth2 : “invalid_grant” error when requesting token for Service Account with Perl

google-api - 无法在 Google 自定义搜索 api 上获取超过 100 个结果的结果

javascript - 如何从 gapi.client 端点获取响应 header

android - Android API 和 Google API 有什么区别?