2017-01-25 4 views
0

私はPythonでGoogle Cloud Endpoint Frameworkを使用してAPIを作成しました.AndroidクライアントはAPIとの対話権限を持つ唯一のアプリケーションです。クラウドエンドポイント認証のオーディエンス

私は1つは、特定のクライアントIDにアクセス権を与えることができ、認証のためのGoogleでのチュートリアルとガイドを踏襲し、APIを保護するために:彼らは「観客は」のクライアントIDを含めるべきであると言うこのsite

WEB_CLIENT_ID = 'myApiClientId.apps.googleusercontent.com' 
ANDROID_CLIENT_ID = 'myAndroidClientId.apps.googleusercontent.com' 
ANDROID_AUDIENCE = [ANDROID_CLIENT_ID] 
ALLOWED_CLIENT_IDS = [WEB_CLIENT_ID, ANDROID_CLIENT_ID, endpoints.API_EXPLORER_CLIENT_ID] 

api_collection = endpoints.api(name='myApi', 
           version='v1', 
           allowed_client_ids=ALLOWED_CLIENT_IDS, 
           audiences=ANDROID_AUDIENCE, 
           auth_level=endpoints.AUTH_LEVEL.REQUIRED 
           ) 

をバックエンドAPI

Androidクライアントの場合、このメカニズムは、バックエンドAPIのクライアントIDを指定するaudiences引数です。

しかしthisサイト上で、彼らは「観客」フィールドは、AndroidクライアントIDが含まれている必要があることを教えてくれ:

は、各クライアントのGoogleのクラウドプラットフォームコンソールから生成されたのOAuth 2クライアントIDのリストをALLOWED_CLIENT_IDSを交換してくださいプロジェクト、はANDROID_AUDIENCEをAndroidウェブクライアントIDのリストに置き換えます。ウェブクライアントIDは、.apps.googleusercontent.coを追加したクライアントIDです(例:YOUR-CLIENT-ID.apps.googleusercontent.com)。

不正アクセスのためにAPIを保護する正しい方法は何ですか?私はバックエンド側で "ユーザ"アカウントを必要としません、私はAndroidクライアントがAPIにアクセスできる唯一のクライアントであることを望みます。クライアントIDが指定され、AUTH_LEVELが必須に設定されているにもかかわらず、私のRESTクライアントはAPIにもアクセスできます。

答えて

0

ANDROID_AUDIENCEは、バックエンドサーバーのWebクライアントIDである必要があります。また、私はアンドロイドアプリケーションのための新しい "WebクライアントID"を追加しなければなりませんでしたが、 "Android"ではなく "Webapplication"タイプでした。このクライアントIDは、AndroidクライアントIDと一緒にgoogle-services.jsonに、バックエンドサーバーのALLOWED_CLIENT_IDS配列に含まれている必要があります。

そして、すべての方法で私はget_current_user()をチェックする必要があります。なぜこれが必要なのか分かりませんが、この方法でしか動作しません。

私は本当にドキュメンテーションまたはより良い "ガイド"はGoogleサイトで一貫していて、一貫していると言っています。

関連する問題