2016-03-31 2 views
1

Javaクライアントを使用してGoogle Cloud Endpoint APIにクライアントIDのハードコードに関する質問があります。JavaクラウドエンドポイントのハードコードされたクライアントIDとuseDatastoreForAdditionalConfigの使用

特定のプロジェクトに関連付けられたクライアントIDを持つ複数のプロジェクトがあり、プロジェクト固有のGAEアーチファクト(WAR)を作成する必要があることが判明しました。これは、マイクロサービスアーキテクチャを使用しており、アーチファクトのコンビナトリアルな爆発が存在するため、理想的ではありません。

環境に依存しないアーチファクトを作成しようとすると、APIの機能が文書化されていないので、useDatastoreForAdditionalConfigという属性が使用されています。

ではなく、以下の、説明するために:

@Api(
    name = "example", 
    version = "v1", 
    scopes = { "example-scope" }, 
    clientIds = { "example-client-id" }, 
) 

は、我々は使用します。私たちはこの機能を聞いたことがあるしかし

@Api(name = "example", 
     version = "v1", 
     useDatastoreForAdditionalConfig = AnnotationBoolean.TRUE 
) 

は、今後のリリースで廃止されます。私の疑問は、私たちが人工物を作る方法に何か間違っているのだろうか? Googleのビルドプロセスに何も問題がなければ、Googleはこれを問題として認識していますか?Javaでプロジェクトに依存しないGAEアーチファクトを作成する計画はありますか?

+2

ドン:

import com.google.api.server.spi.Constant; import com.google.api.server.spi.auth.GoogleOAuth2Authenticator; @Api( name = "example", version = "v1", scopes = { Constant.API_EMAIL_SCOPE }, clientIds = { Constant.SKIP_CLIENT_ID_CHECK }, authenticators = { ClientIdAuthenticator.class,GoogleOAuth2Authenticator.class } ) 

はその後、我々はクライアントIDをプログラムでアサーションの世話をしたカスタム認証を作成useDatastoreForAdditionalConfig'を使用しないでください。 IDトークンではなくOAuth2を使用している場合は、Constant.SKIP_CLIENT_ID_CHECKを使用してクライアントIDを自分で確認できます。 – saiyr

+0

@saiyrこれは役に立つかもしれませんが、これはPython APIにしかないようですが、SKIP_CLIENT_ID_CHECKに相当するJavaはありますか? – druridge

+0

はい、spi.Constantを見てください。 – saiyr

答えて

1

@ saiyrからの指導の後、私たちはこの問題の解決策を思いつき、答えを共有することが役立つだろうと考えました。

私たちは、次の手順を実行して、枠組みの中で、クライアントのIDアサーションをバイパスしています

public class ClientIdAuthenticator implements Authenticator { 
    @Override 
    public User authenticate(HttpServletRequest httpServletRequest) { 
    // Lookup config from cloud datastore for requestURI 
    OAuthService service = OAuthServiceFactory.getOAuthService(); 
    String clientId = service.getClientId(Constant.API_EMAIL_SCOPE); 
    // Assert clientId contained in datastore configuration 
    } 
} 
0

残念ながら、この状況を処理するための良い方法はありません。

注:許可のClientIDをビルド 時に指定する必要があるため、再構築し、追加や は、クライアントIDや観客の任意のクライアントIDを変更した後、あなたのAPIのバックエンドを再デプロイする必要がありますGoogleドキュメントは明らかに限界をhere言及しています。 (また は AndroidのクライアントのためにあなたのAndroidのプロジェクトのために再生されたjarファイルを更新するとiOS クライアントのためのObjective-Cライブラリを再生成する必要があります。)

あなたは、外部化のClientIDを持つ単一のアーティファクトを持つことはできません。しかし、あなたはプラグインを使ってclientIdsを更新するプロセスを自動化することができます。replacer

+0

ご迷惑をお掛け致しますが、私のオリジナル投稿ではっきりしない場合は、useDatastoreForAdditionalConfig属性を使用して外部設定を使用して単一の人工物を作成することができました。それ以前は、この問題に対するさまざまなMavenのアプローチを実装しました。 – druridge

+0

申し訳ありませんが、私はそれを逃した。 'useDatastoreForAdditionalConfig'は廃止予定です。唯一の方法はmavenを使うことです。 :( – Mithun

関連する問題