3

私はChrome拡張機能を作成しており、chrome.identity.launchWebAuthFlowを使用してGoogleで認証しようとしています。 getAuthTokenは現在Chromeにログインしているユーザーのトークンを取得するため、chrome.identity.getAuthToken(これは動作します)にこれを使用することをお勧めします。複数のGoogleアカウントにログインしている可能性があります。ユーザーが特定のGoogleカレンダーを自分の内線番号に接続できるようにしたい場合、そのカレンダーはChromeにログインしたユーザーとは異なるユーザーに属している可能性があります。Google APIに対する認証にchrome.identity.launchWebAuthFlowを使用できますか?

私はchrome.identity.launchWebAuthFlowでこれを実行しようとしていましたが、一般に、不一致のredirect_uriを回避していました。 Google API開発者コンソールで設定できるすべてのタイプの資格情報を試しました。私はchrome.extension.getURL( 'string')とchrome.app.getRedirectURLの両方の結果を使用しようとしましたが(「Chromeアプリケーション」は正しいことと思われましたが、Webアプリケーション、その他、およびiOSも試しました) ( 'string')を私のredirect_uriとして使用します。

私はhttps://stackoverflow.com/questions/40384255/oauth2-angular-chrome-extensionで参照されているサンプルアプリケーションを試しましたが、それを動作させることができませんでした。

私には疑いがあります。私は許されていた、あるいはもはや働いていない、あるいはまったく働いていないことをしようとしています。

ここに私のコードの例ですが、私は私の問題は、APIのdevのコンソールには本当にだと思う - 私は拡張のために働く構成を設定する方法が表示されない:

var auth_url = 'https://accounts.google.com/o/oauth2/v2/auth'; 
    var client_key = *[client id from API dev console]* 
    var auth_params = { 
         client_id: client_key, 
         redirect_uri: chrome.identity.getRedirectURL("oauth2.html") 
         scope: 'https://www.googleapis.com/auth/calendar' 
         }; 
    auth_url += '?' + $.param(auth_params); 

    chrome.identity.launchWebAuthFlow({url: auth_url, interactive: true}, function(token) { console.log(token); }); 

(私もhttps://accounts.google.com/o/oauth2/authエンドポイントを試してみました。)

ソリューション:

を受け入れ答えを読んだ後、私はこれを巻き取る:

var auth_url = 'https://accounts.google.com/o/oauth2/auth'; 
var client_id = '[client ID from console]'; 
var redirect_url = chrome.identity.getRedirectURL("oauth2.html"); 
var auth_params = { 
    client_id: client_id, 
    redirect_uri: redirect_url, 
    response_type: 'token', 
    scope: 'profile' 
}; 
auth_url += '?' + $.param(auth_params); 
console.log(auth_url); 
chrome.identity.launchWebAuthFlow({url: auth_url, interactive: true}, function(responseUrl) { console.log(responseUrl); }); 

responseUrlはパラメータを持つmy redirect_uriです。つまり、ブラウザをリダイレクトする代わりにoauthが返してくれました。私はそこから行くことができます。

+0

トピックにする質問を編集してください:問題を複製する** complete ** [mcve]を含めてください。通常、* manifest.json *、バックグラウンドの*や*コンテンツスクリプトを含みます。デバッグの助けを求める質問(「**なぜこのコードは動作しないのですか?**」)には、以下が含まれていなければなりません:►必要な動作、►特定の問題またはエラー*、および►問題を再現するのに必要な最短コード自体**。明確な問題文がない質問は、他の読者にとって有用ではありません。参照してください: "**どのように[mcve] **を作成するか"、[ここで私はどんな話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)、[ask] – Makyen

+0

この方法はまだあなたのために働いていますか? – seesoe

答えて

0

Angular sampleランニングを取得するには、私が必要:認可クライアントIDにあることhttps://bcgajjfnjjgadphgiodlifoaclnemcbk.chromiumapp.org/oauth2

  • コピーのURIをリダイレクトすると、Googleのデベロッパーコンソールに自分のWebアプリケーションのクライアントIDを作成します

    1. サンプルのconfig.jsonファイルそのサンプル中redirectURIを取得する

    コールは、文字列パラメータを拡張IDに基づいてURLの末尾に付加されます、chrome.identity.getRedirectURL("oauth2")のようなものです。

  • +0

    私はこの仕事をしてすぐにあなたの答えを受け入れることができるかどうかを試してみます。少なくとも、Google開発者向けコンソールで指定したフォームの承認済みリダイレクトURIを入力することができました。 エクステンションは「私たちの」サーバーと直接通信し、私たちのサーバーはユーザーの代わりにoauth2を介してGoogle APIを使用します。とにかくサーバー間通信が必要でした。 –

    +0

    ありがとう!私は角度のあるサンプルに戻っていませんが、あなたのヒントは私がこの固執的なポイントを過ぎ去るのを助けました。 (おそらく、Googleはchrome.identityのドキュメントも更新した。なぜなら、数ヶ月前に思ったことをしないことが明らかになったからだ)。開発コンソールの質問に加えて、auth URLに「response_type」パラメータを追加する必要がありました。 redirect_uriとしてchrome.identity.getRedirectURL( 'whatever')URLを使用する場合、launchWebAuthFlowに渡すコールバックは、クエリパラメータを持つredirect_uriを単一のパラメータとして取得します。 –

    関連する問題