Google API の Web アプリに ClientLogin を使用することが悪い考えなのはなぜですか?
-
19-09-2019 - |
質問
今日、許可するために Google API を入手しました。 当社サイトの一部のユーザーは、当社組織の YouTube アカウントにビデオをアップロードします。 ユーザーにはユーザー名とパスワードを知られたくないのですが、YouTube にビデオをアップロードするかどうかの選択肢をユーザーに提供したいと考えています。実行することを選択した場合は、チェックボックスをオンにして送信ボタンを押します。
私がやりたいことを実装するための最良のオプションのように見える ClientLogin が、Web アプリケーションでのユーザー認証には良いアイデアではないということを、開発者ガイドで何度も目にしています。「Web アプリケーション用の AuthSub」は、私が実装したいものにとって最適なメカニズムではないようです。
何をすべきか何かアイデアはありますか?
ありがとう
解決
Google API や他のビデオ サービス プロバイダー API を試した後、認証について多くのことを学びました。oAuth と AuthSub は、Google がサードパーティの Web アプリケーションをユーザー アカウントに対して認証するために使用する 2 つの方法です。
このプロセスは最初は面倒に思えるかもしれませんが、理解すればそれほど難しくありません。次の図は、AuthSub プロセスを示しています。
- Web アプリケーションがユーザーの Google サービスにアクセスする必要がある場合、Google の認可プロキシ サービスに対して AuthSub 呼び出しを行います。
- 認可サービスは、アクセス要求ページを提供することで応答します。この Google 管理のページは、ユーザーに Google サービスへのアクセスを許可または拒否するよう求めます。ユーザーは最初に自分のアカウントにログインするよう求められる場合があります。
- ユーザーは、Web アプリケーションへのアクセスを許可するか拒否するかを決定します。ユーザーがアクセスを拒否した場合、Web アプリケーションには戻らず、Google ページにリダイレクトされます。
- ユーザーがアクセスを許可すると、認可サービスはユーザーを Web アプリケーションにリダイレクトします。リダイレクトには、1 回限りの使用に適した認可トークンが含まれています。有効期間の長いトークンと交換できます。
- Web アプリケーションは、ユーザーのエージェントとして機能する認可トークンを使用して、リクエストで Google サービスに接続します。
- Google サービスがトークンを認識すると、要求されたデータが提供されます。
http://code.google.com/apis/accounts/docs/AuthSub.html#AuthProcess
認証をリクエストし、ユーザーが自分の Google アカウントにサインインするとき、ユーザーが自分のアカウントで何かを行うための許可をアプリケーションに与える前に、ドメインが Google に登録されていない場合、ユーザーはアクセスを許可しようとしているアプリは登録されていないため、注意するように警告する厄介な赤いボックス。
従来のユーザー名とパスワードに比べて、これらの方法の利点は、(私の意見では) 次のとおりです。
- ユーザーのセキュリティを強化:ユーザーはユーザー名とパスワードを入力する必要はありません。Google にログインするだけで、その後の API 呼び出しに使用するアクセス トークンを取得できます。ユーザーは必要に応じて、Google 内からアプリケーションへのアクセスを取り消すことができます。
- このプロセスにより、アプリが「正規」であるという保証がユーザーに与えられる場合があります。ユーザーがログインしてアプリを許可するために Google を経由する必要がある場合、ドメインが Google に登録されていれば適切に見える可能性があります。
- トークンはセッション トークンに昇格できます。これは、Google ユーザー アカウントへのアクセスをリクエストする必要があるたびにユーザーにログインを求める必要がなく、セッション トークン (どこかに安全に保存する必要があります) を使用するだけで完了することを意味します。
- プロセスを理解すれば、ユーザーを認証するのは非常に簡単です。
- (未検証) ユーザーがパスワードを変更した場合、セキュリティ トークンを更新する必要はありません。
- 最後に、oAuth を使用すると、Vimeo などの他の Web サービスに接続するときにユーザーを簡単に認証できるインターフェイスを作成できます。
これらすべてを踏まえると、ユーザー アカウントに接続するためにユーザー名とパスワードを使用する (ClientLogin が行うことです) ことがなぜ悪い考えであるのかが理解できると思います。他の認証方法でも同じこと (アクセスのリクエスト) を行うことができ、多くの利点が追加されます。
AuthSub を使用してユーザーを認証する方法のコードはここにあります。これはほとんどプラグ アンド プレイです。$_SESSION['sessionToken'] を DB などのより永続的な場所に保存するようにしてください。
http://code.google.com/apis/youtube/2.0/developers_guide_php.html#AuthSub_for_Web_Applications
他のヒント
ClientLoginのは、ここで推奨メカニズムではありません。ユーザのアイデンティティがセッションよりも長く確立する必要がある場合は、資格情報を格納することを余儀なくされるでしょうし、これは非理想的である - あなたのサーバーの妥協は、GoogleのユーザーFOの妥協につながります。したがって、ClientLoginのは、アプリケーションのための適切なアプローチではありません。
あなたはグーグルのOAuth まで見たことがありますか?これは非常にエレガントなパスワード処理の問題を解決し、確立された標準です。
私は同じ問題を持っていた、と私はClientLoginのを使用して終了しました。あなたは、ユーザーがログインプロセスのどの部分を表示したくない場合は、これを行います。
のAuthSubまたは他の認証方法でこれを行うには良い方法があるかどうか、私は知りません。