1

良いニュースは、私はofficial tutorialをJavascriptでGoogleドライブREST APIにアクセスしていたことです。しかし、client_idでもではなく、client_secretがコードで使用されています。アプリを登録している間JavascriptのOAuthにクライアントシークレットが必要ないのはなぜですか?

/** 
* Check if current user has authorized this application. 
*/ 
function checkAuth() { 
gapi.auth.authorize(
    { 
    'client_id': CLIENT_ID, 
    'scope': SCOPES.join(' '), 
    'immediate': true 
    }, handleAuthResult); 
} 

、私が使用されていないclient_secretを与えられています。 は、herehereのように、auth_tokenリクエストで送信する必要がありますか?

下記のコメントに記載されているとおり、client_idclient_secretとは対照的に公開されています。 を取得するためにclient_secretを使用していないにもかかわらず、GoogleのOAuth 2.0がどのように機能するのか、私は驚きました。それはOAuth 2.0仕様で義務付けられていませんか?悪意のあるアプリが正当なものを偽装するのを防ぐのは何ですか?

私はlocalhost:8000を自分のJavascript起源として設定できます。

enter image description here

答えて

0

どちらのクライアントIDとクライアントシークレットは、アプリケーションを識別するために使用されています。クライアントIDは公開情報であり、ユーザーには表示できます。秘密は秘密にする必要がありますが、誰でもあなたのアプリケーションの資格情報を強力に使用することができます。

JavaScriptはクライアント側であるため、ページ上にソースを表示すると、クライアントIDが表示されます。あなたのコードにも秘密が含まれていれば、それも同様に表示され、それを使用できるようになります。

私はこれがJavaScriptを使用する必要があると考えています。JavaScriptアプリケーションでこの秘密を使用するのではなく、セキュリティ層を追加します。

RFC6749

認証サーバは、登録されたクライアントに、クライアント 識別子発行 - クライアントが提供する登録 情報を表す一意の文字列を。クライアント識別子は の秘密ではありません。それはリソース所有者に公開されており、 だけをクライアント認証に使用してはならない。クライアント識別子は、 の認証サーバーに固有です。

英語:Google開発者コンソールは、クライアント(プロジェクト)を識別するための一意の文字列を作成するアプリケーション(クライアント)を登録します。クライアントIDは秘密ではなく、データの所有者に表示する必要があります。

4.1. Authorization Code Grantクライアント秘密鍵は、私が見る限り、認証コード交換の必須部分ではありません。

+0

私は 'client_id'が' client_secret'ではなくpublicであると理解します。私が驚いているのは、 'auth_token'を得るために' client_secret'を使わないにもかかわらず、GoogleのOAuth 2.0がどう機能しているかです。それはOAuth 2.0仕様で義務付けられていませんか? –

+0

悪意のあるアプリが正当なものを偽装することを防止しているのは何ですか? –

+0

おそらく、JSライブラリ内のいくつかの魔法は私の推測だろう。そのことと、JavaScriptの原点とURIのリダイレクトがロックされたという事実。あなたが提供した場所から電話が来ていないかぎり、その電話は動作しません。 – DaImTo

関連する問題