2017-06-12 5 views
0

アンドロイドアプリから送信されたIdTokenでアンドロイドクライアントにサービスを提供しているバックエンドがあります。 これで、私のapiを使用しているaws上で実行されているサービスを認証する必要があります。だから私はサービスアカウントが、個人的なpemファイルを使ってIdTokenを作成し、アンドロイドのクライアントと同様にそれを送信するというトリックを行うと考えました。しかし、私はこれらの資格情報でIdTokenを入手する方法がないことを知っています。これは可能です(nodejsの方が好ましい)。 ここで間違った経路にいるのですか?サービスアカウントのGoogle IdTokenを取得していますか?

+0

質問 - これらのAPIには、独自のAPIまたはGoogleのクラウドAPIがあります。サービスアカウントは、Google Cloud APIに関する委任の手段としてのみ使用されます。たとえば、サービスやサードパーティがAPIのサブセットのみを呼び出すようにするには、サービスアカウントを使用できます。あなたの場合、Cloud EndpointsとAPIキーを調べるべきだと思います。 – Tuxdude

+0

はい、これは自分のapiの認証です。しかし、外部のサーバーからも "私の"です。私のアイデアは、アイデンティティを主張するためだけに、サービスアカウントに全く権限を与えないことでした。 CloudEndpointsは別の実装を強制します(春を使用しています)。しかし、サービスアカウントとプライベートファイルからIdTokenを取得する方法はありますか? –

答えて

0

Google Cloud API用に生成されたサービスアカウントを使用して、独自のAPIに対して直接認証することはできません。どのサービスアカウントの秘密鍵が有効であり、どのサービスアカウントの秘密鍵が失効しているかはどのように分かりますか? Googleはこの情報を公開していません。

サービスアカウントは、資格情報を委任するためのものです。 Google Cloud Platformサービスにアクセスすると、Googleアカウントの認証情報で認証されます。実行コードがGoogleクラウドサービス(クラウドAPIなど)にアクセスする必要がある場合は、常に同じ資格情報をプロビジョニングする必要はありません。代わりに、スコープをGoogleアカウントの資格情報のスコープのサブセットに縮小できるサービスアカウントを作成します。このように、コードの特定の部分は、ほんの少数のAPIセットに限定することができます。

Service Accounts

サービスアカウント

は、他のGoogleクラウドプラットフォームAPIと対話サービス と するには、Google Compute Engineのインスタンス上で実行中のアプリケーションで使用できる特殊なアカウントです。アプリケーションは サービスアカウントの資格情報を使用して、APIセット に自分自身を認証し、サービス アカウントと仮想マシンインスタンスに与えられたアクセス許可内でアクションを実行できます。

サービスアカウントとは何ですか?

サービスアカウントは、仮想マシン で実行されているアプリケーションを他のGoogle Cloud Platformサービスに対して認証します。 の例では、ファイルを読み書きするアプリケーションを Google Cloud Storageに書き込む場合、最初にGoogle Cloud Storage APIを認証する必要があります。サービスアカウントを作成し、 サービスにCloud Storage APIへのアカウントアクセスを許可することができます。次に、 アプリケーションコードを更新して、サービスアカウントの資格情報をCloud ストレージAPIに渡します。このようにして、 インスタンス、画像、またはアプリケーションコードに秘密鍵またはユーザー資格情報を埋め込むことなく、アプリケーションは APIとシームレスに認証されます。

あなたの混乱の原因はわかっています。これは、サービスアカウントにも同じOAuthモデルが使用されているためです。

サービスアカウントを使用してトークンにアクセスし、必要に応じて更新することができますが、認証の範囲はGoogle Cloud APIの表面に限定されています。あなたはそれをあなたのAPIと混在させることはできません。

authenticating them with IdToken sent from the android appと言うと、自分の認証モデルを作成するか、認証用のAPIキーとともにAPIを作成および管理するCloud endpointsなどを使用してください。

あなたのコメントの1つですでに述べたとおり、Google Cloud Serviceアカウントを使用してGoogle Cloud Endpoint上で実行されているAPIで認証する方法について説明しているService-to-Service authenticationガイドに従うことができます。

トークンを使用すると、Google ID JWTトークンを使用できます。呼び出し元はJWTをGoogleトークンエンドポイントに送信してGoogle IDトークンを取得し、このすべてのリクエストにこのGoogle IDトークンを使用する必要があります。この方法には、API設定のGoogle IDトークンサーバーのみをホワイトリストに登録する必要があるという利点もあります。

+0

ありがとう@Tuxdude、豊富で有益な答え:o)! アイデアは、リクエストを認証するためのGoogle IdTokensを使用することです。これは、SSO/GooglePlayServicesからIdTokenを取得し、cloudconsole-credentialsの設定を行うアンドロイドアプリの推奨方法です。したがって、私は他のユーザー(つまりサーバー)が同じメカニズムを使用することを望んでいます。 –

+0

私は[これ](https://cloud.google.com/endpoints/docs/service-to-service-auth#using_a_google_id_token)を見つけました。これは、これが私の望むやり方でできることを示唆しています。プライベートキーで署名されたjwtは、次にIdtokenを取得するためにGoogleに送信されます。私は試してその機能はうまく機能していますが、あなたの答えから、私は今、私が誤解していると心配しています。これは安全ではないかもしれません...:o/ –

+0

トークンを使っている限りGoogle Cloud APIのうち、動作します。 Cloud EndpointsはGoogleクラウドサービスであり、したがって発信者を認証することができます。サービスアカウントとクラウドエンドポイントを使用することで、適切な方向に進んでいます。申し訳ありませんが、私は答えでこれを明確にして、今更新する必要があります。 – Tuxdude

関連する問題