私は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
を使用して生成されています。
私はオンラインで多くを検索し、ブログやスレッドを読んでいますが、私はそれを動作させることができませんでした。これは可能なことですか?私は間違って何をしていますか?
私のアプリからの呼び出しのみを許可するには、認証されたコールを使用する必要がありますか?あなたが送った最初のリンクを読んだところ、それは私のコードにあります。私は何をしようとしているのですか? また、最初のリンクには、「Androidアプリの場合、AndroidクライアントIDとクライアントIDの両方をclientIdsに指定する必要があります」と書かれていますが、AndroidクライアントだけのWebクライアントはありません。 –
はい、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クライアントの資格情報を作成する必要があります。 –
WebクライアントIDは何か分かりませんでしたが、ここで答えが見つかりました:https://stackoverflow.com/a/34158187/7483311これは私の欠けていた部分でした。私は両方のリンクに従って、それは働いた。 –