54.2. gauth


gauth コンポーネント

重要
GAE コンポーネントは非推奨となり、JBoss Fuse の今後のリリースで削除される予定です。
Apache Camel 2.3 で利用可能
gauth コンポーネントは、Google 固有の OAuth コンシューマーを実装するために Web アプリケーションによって使用されます。他の OAuth プロバイダーもサポートするように、後で拡張されます。このコンポーネントは Google App Engine (GAE)の Camel コンポーネントに属していますが、OAuth-enable 非 GAE Web アプリケーションにも使用することができます。Google の OAuth 実装の詳細については、Google OAuth API リファレンス を参照してください。

URI 形式

gauth://name[?options]
Copy to Clipboard Toggle word wrap
エンドポイント は、を 承認 または アップグレード できます。承認 エンドポイントは、Google から承認されていないリクエストトークンを取得し、ユーザーを承認ページにリダイレクトするために使用されます。upgrade エンドポイントは、Google から OAuth コールバックを処理し、承認されたリクエストトークンを有効期限の長いアクセストークンにアップグレードするために使用されます。例については、使用方法のセクション を参照してください。

オプション

Expand
名前 デフォルト値 必須 説明
callback null True ( GAuthAuthorizeBinding.GAUTH_CALLBACK メッセージヘッダーで設定することもできます) アクセスの許可または拒否後にユーザーをリダイレクトする URL。
scope null true ( GAuthAuthorizeBinding.GAUTH_SCOPE メッセージヘッダーで設定することもできます) アクセスするサービスを識別する URL。スコープは各 Google サービスによって定義されます。正しい値については、サービスのドキュメントを参照してください。複数のスコープを指定するには、それぞれをコンマで区切って一覧表示します。例: http://www.google.com/calendar/feeds/
consumerKey null True ( コンポーネントレベルでも設定できます)。 Web アプリケーションを識別するドメイン。これは、アプリケーションを Google に登録する際に使用されるドメインです。例: camelcloud.appspot.com登録されていないアプリケーションでは、匿名 を使用します。
consumerSecret null consumerSecret または keyLoaderRef のいずれかが必要です(または、コンポーネントレベルの で設定できます)。 Web アプリケーションのコンシューマーシークレット。コンシューマーシークレットは、アプリケーションを Google に登録する際に生成されます。HMAC-SHA1 署名方式を使用する場合は、これが必要です。登録されていないアプリケーションでは、匿名 を使用します。
keyLoaderRef null consumerSecret または keyLoaderRef のいずれかが必要です(代わりに コンポーネントレベルの に設定できます)。 レジストリー内の秘密鍵ローダーへの参照。camel-gae の一部は 2 つの主要なローダーです。PKCS#8 ファイルから秘密鍵を読み込む GAuthPk8Loader と、Java キーストアから秘密鍵を読み込む GAuthJksLoader です。これは、RSA-SHA1 署名メソッドを使用する場合は必要になります。これらのクラスは org.apache.camel.component.gae.auth パッケージで定義されます。
authorizeBindingRef GAuthAuthorizeBindingへの参照 false エクスチェンジGoogleOAuthParameters にバインドされる方法をカスタマイズするための OutboundBinding<GAuthEndpoint, GoogleOAuthParameters, GoogleOAuthParameters > への参照。このバインディングは、teh 承認フェーズに使用されます。ほとんどのアプリケーションはデフォルト値を変更しません。
upgradeBindingRef GAuthAuthorizeBindingへの参照 false レジストリーでの OutboundBinding<GAuthEndpoint、GoogleOAuthParameters、GoogleOAuthParameters > への参照。エクスチェンジGoogleOAuthParameters にバインドされる方法をカスタマイズするためのものです。このバインディングは、teh トークンのアップグレードフェーズに使用されます。ほとんどのアプリケーションはデフォルト値を変更しません。

メッセージヘッダー

Expand
名前 タイプ エンドポイント メッセージ 説明
GAuthAuthorizeBinding.GAUTH_CALLBACK 文字列 gauth:authorize in コールバック オプションを上書きします。
GAuthAuthorizeBinding.GAUTH_SCOPE 文字列 gauth:authorize in scope オプションを上書きします。
GAuthUpgradeBinding.GAUTH_ACCESS_TOKEN 文字列 gauth:upgrade out 有効期間の長いアクセストークンが含まれています。このトークンは、アプリケーションによってユーザーのコンテキストに保存する必要があります。
GAuthUpgradeBinding.GAUTH_ACCESS_TOKEN_SECRET 文字列 gauth:upgrade out アクセストークンのシークレットが含まれます。このトークンシークレットは、アプリケーションによってユーザーのコンテキストに保存する必要があります。

メッセージボディー

gauth コンポーネントはメッセージの本文を読み書きしません。

コンポーネントの設定

consumerKeyconsumerSecretkeyLoader などの一部のエンドポイントオプションは、通常 gauth:authorize および gauth:upgrade エンドポイントで同じ値に設定されます。gauth コンポーネントは、コンポーネントレベルでそれらを設定できるようにします。これらの設定は gauth エンドポイントによって継承され、エンドポイント URI で冗長的に設定する必要はありません。以下は、いくつかの設定例になります。
HMAC-SHA1 署名方法を使用した登録済み Web アプリケーションのコンポーネント設定
<bean id="gauth" class="org.apache.camel.component.gae.auth.GAuthComponent">
    <property name="consumerKey" value="example.appspot.com" />
    <property name="consumerSecret" value="QAtA...HfQ" />
</bean>

Copy to Clipboard Toggle word wrap
HMAC-SHA1 署名方法を使用した未登録の Web アプリケーションのコンポーネント設定
<bean id="gauth" class="org.apache.camel.component.gae.auth.GAuthComponent">
    <!-- Google will display a warning message on the authorization page -->
    <property name="consumerKey" value="anonymous" />
    <property name="consumerSecret" value="anonymous" />
</bean>

Copy to Clipboard Toggle word wrap
RSA-SHA1 署名メソッドを使用した登録済み Web アプリケーションのコンポーネント設定
<bean id="gauth" class="org.apache.camel.component.gae.auth.GAuthComponent">
    <property name="consumerKey" value="ipfcloud.appspot.com" />
    <property name="keyLoader" ref="jksLoader" />
    <!--<property name="keyLoader" ref="pk8Loader" />-->
</bean>

<!-- Loads the private key from a Java key store -->
<bean id="jksLoader"
    class="org.apache.camel.component.gae.auth.GAuthJksLoader">
    <property name="keyStoreLocation" value="myKeytore.jks" />
    <property name="keyAlias" value="myKey" />
    <property name="keyPass" value="myKeyPassword" />
    <property name="storePass" value="myStorePassword" />
</bean>

<!-- Loads the private key from a PKCS#8 file -->
<bean id="pk8Loader"
    class="org.apache.camel.component.gae.auth.GAuthPk8Loader">
    <property name="keyStoreLocation" value="myKeyfile.pk8" />
</bean>

Copy to Clipboard Toggle word wrap

使用方法

以下は、(GAE 以外の) Web アプリケーションに OAuth を追加するための最低限の設定です。以下の例では、Web アプリケーションが gauth.example.org で実行されていることを前提としています。
GAuthRouteBuilder.java
import java.net.URLEncoder;
import org.apache.camel.builder.RouteBuilder;

public class GAuthRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        // Calback URL to redirect user from Google Authorization back to the web application
        String encodedCallback = URLEncoder.encode("https://gauth.example.org:8443/handler", "UTF-8");
        // Application will request for authorization to access a user's Google Calendar
        String encodedScope = URLEncoder.encode("http://www.google.com/calendar/feeds/", "UTF-8");

        // Route 1: A GET request to http://gauth.example.org/authorize will trigger the the OAuth
        // sequence of interactions. The gauth:authorize endpoint obtains an unauthorized request
        // token from Google and then redirects the user (browser) to a Google authorization page.
        from("jetty:http://0.0.0.0:8080/authorize")
            .to("gauth:authorize?callback=" + encodedCallback + "&scope=" + encodedScope);

        // Route 2: Handle callback from Google. After the user granted access to Google Calendar
        // Google redirects the user to https://gauth.example.org:8443/handler (see callback) along
        // with an authorized request token. The gauth:access endpoint exchanges the authorized
        // request token against a long-lived access token.
        from("jetty:https://0.0.0.0:8443/handler")
            .to("gauth:upgrade")
            // The access token can be obtained from
            // exchange.getOut().getHeader(GAuthUpgradeBinding.GAUTH_ACCESS_TOKEN)
            // The access token secret can be obtained from
            // exchange.getOut().getHeader(GAuthUpgradeBinding.GAUTH_ACCESS_TOKEN_SECRET)
            .process(/* store the tokens in context of the current user ... */);
    }

}

Copy to Clipboard Toggle word wrap
OAuth シーケンスは、 http://gauth.example.org/authorize に GET リクエストを送信することでトリガーされます。その後、ユーザーは Google 承認ページにリダイレクトされます。このページへのアクセスを許可した後、Google はユーザーをコールバックを処理する Web アプリケーションにリダイレクトすると、最後に Google から有効期限の長いアクセストークンを取得します。
これら 2 つのルートは、他の Web アプリケーションフレームワークと完全に共存できます。フレームワークは、Web アプリケーション固有の機能の基盤を提供しますが、OAuth サービスプロバイダーのインテグレーションは Apache Camel で実行されます。OAuth 統合部分は、jetty コンポーネントの代わりにサーブレットコンポーネントを使用して、既存の サーブレット コンテナーのリソースを使用することもできます。
OAuth アクセストークンについて
  • アプリケーションは、現在のユーザーのコンテキストでアクセストークンを保存する必要があります。ユーザーが次回ログインする場合、OAuth の dance を再度実行せずに、アクセストークンをデータベースから直接読み込むことができます。
  • その後、アクセストークンを使用して、ユーザーの代わりに Google カレンダー API などの Google サービスへのアクセスを取得します。Java アプリケーションは多くの場合、GData Java ライブラリー を使用する可能性が高くなります。ユーザーのカレンダーフィードを読み取るために GData Java ライブラリーでアクセストークンを使用する方法の は、以下を参照してください。
  • ユーザーは、Google Accounts ページからアクセストークンをいつでも取り消すことができます。この場合、対応する Google サービスにアクセスすると、承認例外が発生します。Web アプリケーションは、保存されたアクセストークンを削除し、別のトークンを作成するためにユーザーを Google 承認ページにリダイレクトする必要があります。
上記の例は、以下のコンポーネント設定に依存します。
<bean id="gauth" class="org.apache.camel.component.gae.auth.GAuthComponent">
    <property name="consumerKey" value="anonymous" />
    <property name="consumerSecret" value="anonymous" />
</bean>

Copy to Clipboard Toggle word wrap
Google が承認ページに警告メッセージを表示したくない場合は、Web アプリケーションを 登録 して consumerKey および consumerSecret 設定を変更する必要があります。

GAE の例

Google App Engine アプリケーションを有効にするには、ルートビルダーでいくつかの小さな変更のみが必要になります。GAE アプリケーションのホスト名が camelcloud.appspot.com であるとすると、設定は以下のようになります。ここでは、ghttp コンポーネントは、jetty コンポーネントの代わりに HTTP (S)要求を処理するために使用されます。
GAuthRouteBuilder
import java.net.URLEncoder;
import org.apache.camel.builder.RouteBuilder;

public class TutorialRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        String encodedCallback = URLEncoder.encode("https://camelcloud.appspot.com/handler", "UTF-8");
        String encodedScope = URLEncoder.encode("http://www.google.com/calendar/feeds/", "UTF-8");

        from("ghttp:///authorize")
            .to("gauth:authorize?callback=" + encodedCallback + "&scope=" + encodedScope);

        from("ghttp:///handler")
            .to("gauth:upgrade")
            .process(/* store the tokens in context of the current user ... */);
    }

}

Copy to Clipboard Toggle word wrap

アクセストークンの使用

以下の例は、アクセストークンを使用して、GData Java ライブラリー でユーザーの Google カレンダーデータにアクセスする方法を示しています。サンプルアプリケーションは、ユーザーのパブリックおよびプライベートカレンダーのタイトルを stdout に書き込みます。
アクセストークンの使用
import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer;
import com.google.gdata.client.authn.oauth.OAuthParameters;
import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.calendar.CalendarEntry;
import com.google.gdata.data.calendar.CalendarFeed;

import java.net.URL;

public class AccessExample {

    public static void main(String... args) throws Exception {
        String accessToken = ...
        String accessTokenSecret = ...

        CalendarService myService = new CalendarService("exampleCo-exampleApp-1.0");
        OAuthParameters params = new OAuthParameters();
        params.setOAuthConsumerKey("anonymous");
        params.setOAuthConsumerSecret("anonymous");
        params.setOAuthToken(accessToken);
        params.setOAuthTokenSecret(accessTokenSecret);
        myService.setOAuthCredentials(params, new OAuthHmacSha1Signer());

        URL feedUrl = new URL("http://www.google.com/calendar/feeds/default/");
        CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class);

        System.out.println("Your calendars:");
        System.out.println();

        for (int i = 0; i < resultFeed.getEntries().size(); i++) {
            CalendarEntry entry = resultFeed.getEntries().get(i);
            System.out.println(entry.getTitle().getPlainText());
        }
    }
}
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat