2017-06-01 20 views
1

私はGoogle App Engineを初めて使い、最初のエンジンを作り、それをAndroidアプリに接続しようとしています。私はそれについて学ぶために、このチュートリアルを歩いてきた:Androidアプリケーションへのエンドポイントへのアクセスを制限する

https://cloud.google.com/endpoints/docs/frameworks/legacy/v1/java/helloendpoints-android-studio

私はそれがうまく動作するようになりました。私はアンドロイドアプリから自分のアプリエンジンにアクセスし、必要な応答を得ることができます。問題は、APIのエンドポイントをアプリのユーザーに限定することです。

これは私のAPIメソッドです(チュートリアルのものです)、今のところ、誰でも自分のapiのエクスプローラにアクセスし、どのGoogleアカウントにもログインしている限り、そのメソッドを実行できます。

私は、ユーザーが唯一の私のアプリから、この方法を実行できるようにしたいです。

これは私のApp EngineのJavaファイルです:

package com.example.Barda.myapplication.backend; 

import com.google.api.server.spi.config.Api; 
import com.google.api.server.spi.config.ApiMethod; 
import com.google.api.server.spi.config.ApiNamespace; 
import com.google.api.server.spi.response.UnauthorizedException; 
import com.google.appengine.api.users.User; 

import javax.inject.Named; 

/** 
* An endpoint class we are exposing 
*/ 
@Api(

     name = "myApi", 
     version = "v1", 
     clientIds = {Constants.ANDROID_CLIENT_ID}, 
     audiences="firebase-wiki-race.appspot.com", 
     namespace = @ApiNamespace(
       ownerDomain = "backend.myapplication.Barda.example.com", 
       ownerName = "backend.myapplication.Barda.example.com", 
       packagePath = "" 
     ) 

) 
public class MyEndpoint { 
    /** 
    * A simple endpoint method that takes a name and says Hi back 
    */ 
    @ApiMethod(name = "sayHi") 

    public MyBean sayHi(@Named("name") String name) throws UnauthorizedException { 

     // if (user == null) throw new UnauthorizedException("User is Not Valid"); 

     MyBean response = new MyBean(); 
     response.setData("Hi, " + name); 
     return response; 
    } 

} 

これは定数クラスです:

package com.example.Barda.myapplication.backend; 

/** 
* Contains the client IDs and scopes for allowed clients consuming your API. 
*/ 
public class Constants { 
    public static final String ANDROID_CLIENT_ID = "*********************.apps.googleusercontent.com"; 

} 

私は私のアプリのSH-1とパッケージ名にANDROID_CLIENT_IDを使用して生成されています。


私はオンラインで多くを検索し、ブログやスレッドを読んでいますが、私はそれを動作させることができませんでした。これは可能なことですか?私は間違って何をしていますか?

答えて

0

adding authorization to the API backendのドキュメントのガイドに従ってください。このプロセスでは、エンドポイントの使用を許可されているクライアントのリストを定義します。

完了したら、Androidのmaking authenticated callsのガイドに従うことができます。

+0

私のアプリからの呼び出しのみを許可するには、認証されたコールを使用する必要がありますか?あなたが送った最初のリンクを読んだところ、それは私のコードにあります。私は何をしようとしているのですか? また、最初のリンクには、「Androidアプリの場合、AndroidクライアントIDとクライアントIDの両方をclientIdsに指定する必要があります」と書かれていますが、AndroidクライアントだけのWebクライアントはありません。 –

+0

はい、APIへのアクセスを制限する唯一の方法は、認証の形式を使用することです。これは、[サービスアカウントの作成](https://cloud.google.com/iam/docs/creating-managing-service-accounts)と[秘密キーを使用した認証(https://クラウド)]ということができます。 google.com/iam/docs/creating-managing-service-account-keys)をAndroidアプリから削除します。 2番目のリンクのコードは、単に認証された呼び出しを行う方法の例を示しています。最後に、必要なAndroid AudienceのAndroidクライアントの上に一連のWebクライアントの資格情報を作成する必要があります。 –

+0

WebクライアントIDは何か分かりませんでしたが、ここで答えが見つかりました:https://stackoverflow.com/a/34158187/7483311これは私の欠けていた部分でした。私は両方のリンクに従って、それは働いた。 –

関連する問題