3

2 つの異なる OAuth 接続を処理する Google App Script を作成しました。

1- ユーザーに代わってメールを送信し、Google ドキュメントにアクセスするための Google 自体 (キー、シークレットの取得に使用される Google API コンソール)

2- タイムシートのクラウドベースのアプリである gtraxapp。(スクリプトの登録、キー/シークレットの取得など)

スクリプトは Web アプリとして公開されます。それは私のユーザーにとって完璧に機能します。

別のユーザー名でログオンすると、別のキー/シークレットを提供せずに Google OAuth を承認でき、実際のユーザーからメールが送信されます。

2 番目のアプリ (gTrax) で問題が発生します。承認は機能しているようです。スクリプト内で関数を実行して許可を求める画面につながると、gtrax が登録済みアプリとしてアカウントに表示されます (必要に応じてアクセスを取り消すことができます)。しかし、アプリを実行すると、このアクションを実行するには許可が必要だというメッセージが表示されます (UrlFetchApp / simple get)

私の質問は:

全員のキー/シークレットを取得するために各ユーザーを登録する必要がある可能性はありますか(スクリプトでそれを処理します)...または、OAuthは1つのキー/シークレットで登録できますか?

言い換えれば、キー/シークレットは単一のユーザーにリンクされている (べきである) か、それとも、検証されたときに任意のユーザーを承認するために使用できる RSA のようなキー ペアの一種にすぎないかということです。

4

1 に答える 1

3

私の理解はこれです。のような組み込みの Apps Script 関数を使用するMailApp.sendEmailと、Google Apps Script の「環境」がユーザーの承認を求め (最初にアプリにアクセスするとき)、oAuth トークンを保存して管理します。スムーズに実行されます。

を使用して外部サービスを呼び出す場合UrlFetchApp、Apps Script の oAuth 承認プロセスの動作が異なります。fetch認証は、実際に呼び出しを行ったときに、スクリプト エディターに表示される単なる奇妙なポップアップです。「コンパイル時」には処理されず、他のサービスのようなものを実行する前に尋ねられます。ただし、この手順も 1 回だけ実行します。「落とし穴」は、ユーザーがアプリを webapp として実行している場合、この別の承認プロセスが機能しないことです。私の知る限り、スクリプト エディター自体から、またはスプレッドシートから直接実行する場合にのみ機能します。

ユーザーがごく少数の既知のユーザーである場合は、スクリプト エディター (またはスクリプト エディターを含むスプレッドシート) を開いて、特定の関数を実行してUrlFetchApp.fetch呼び出しを試行するように全員にアドバイスして、ポップアップが表示され、承認されるようにすることができます。この手順が完了すると、通常どおり webapp を使用できるようになります。その後は、Apps Script が魔法のようにやってくれます。

ただし、これを Chrome ウェブストアなどで広く共有する予定があり、すべてのユーザーにこのやや奇妙な手順を実行するよう求めたくない場合は、すべての認証プロセスを自分で管理する必要があります。つまり、アプリをサードパーティ サービス (Google の場合は API コンソール) に登録する必要があり、そこで と を受け取りclient idますclient secret。それらを使用すると、アプリのhtmlに「承認」送信ボタンを配置して、ユーザーをサードパーティの承認URLにリダイレクトし、正しいスコープを提供する必要があります。承認すると、サードパーティはユーザーをリダイレクトしますcodeURL パラメーターとしてトークンを提供するアプリに。君は'codeaccessrefreshUrlFetch呼び出します。これらのトークンを保存し、有効期限が切れたときに更新するなどの責任があります。非常に単純な手順ではありません:-/

ああ、アプリには と が 1 つしかありませんがidsecretトークンはユーザーごとです。あなたが行う各呼び出しは特定のユーザーに代わって行う必要があり、彼はそれを承認している必要があるため、これは理にかなっています。

これが役立つことを願っています。

于 2012-11-23T00:12:20.433 に答える