Google Cloud Endpoints APIのクライアントは、エンドポイントAPI自体と同じGoogle App EngineアプリケーションでホストされるJavaScript(AngularJS)Webアプリケーションです。ユーザーはwebapp2 sessions(データストア)を使用して認証します。必ずしもGoogleアカウントを持っているとは限りません。 /api/users/me
のようなEndpoints APIへのリクエストは、現在ログインしているユーザーのユーザーデータを返します。webapp2セッションを使用したGoogle Cloud Endpoints認証
まず、私はApp EngineアプリケーションのOAuth2プロバイダーを実装しなければならないと思っていました。 AngularJSアプリケーションで、独自のApp Engine OAuthプロバイダ(GoogleのOAuthプロバイダではなく、組み込みの認証メカニズムのような)からOAuth2アクセストークンをリクエストさせます。
しかし、this commentは、独自のOAuth2プロバイダを実装するのではなく、エンドポイントAPIに対するリクエスト(メッセージフィールドまたはHTTPヘッダー)で任意のパラメータを提供することを提案しています。私はそのパラメータは、ユーザートークン(いくつかの暗号化された値は、ログインユーザーに固有のものでなければならないと思います)。その値はブラウザに渡されます。それは安全ではないですか?可能であれば(コストを節約するために)私のAngularJSアプリケーションをHTTPSに提供しないことを望みます。
これはOAuth2の良い使用例ですか?または、OAuth2は、サードパーティのアプリケーションにユーザデータへのアクセスを許可する場合にのみ使用できますか?
OAuth2は、ユーザートークンをブラウザに安全に渡し、man-in-the-middle攻撃を防ぐ方法です。特定の時間が経過した後にユーザートークンが期限切れになる必要がありますか?
さらに、自分の認証をまったくロールすることはお勧めしません。そうすることで問題が発生します。認証パラメータを渡すことについて言及したとき、私は他のプロバイダ(TwitterやFacebookなど)のコンテキストで、ユーザーを識別するトークンを提供していました。ほとんどの場合、これらの値はHTTPS経由でブラウザに渡すのが安全です。ほとんどのユーザーはFacebook/Twitter/Yahoo/Google /(他の大規模なアイデンティティプロバイダを挿入する)アカウントを1つ以上所有しているので、認証を処理するためにそれらの企業を延期することは、ほとんど常に良いアイデアです。 –
現在、私のアプリケーションは、認証を処理するために、[gae-simpleauth](https://code.google.com/p/gae-simpleauth/)に類似したフェデレーションログインと類似のものを使用しています。ユーザーは、FacebookまたはGoogleアカウント、またはユーザー名/パスワードの組み合わせを使用してログインできます。だから多分私はもはやユーザー名/パスワードをサポートしなくてもよいはずです(私は多くの人々がプライバシー上の理由から自分のFacebookやGoogleアカウントを使ってウェブサイトにログインすることを熱望していないと思います)。 HTTPS経由でAngularJSアプリを提供する場合、エンドポイントAPIをリクエストするユーザーを識別するために、{'provider': 'facebook'、 'access_token': 'TOKEN'} 'などの情報を渡す必要があります。 – Korneel
はい、そうです。ユーザー名/パスワードの認証を諦めたくない場合は、ユーザーのログイン時にトークンを作成することで同様のことができます。トークンには有効期限がなければなりません。それ以外の場合はパスワードと同じです(渡すべきではありません)。リクエストとURLの周りに)。 –