1

新しいスコープを使用するようにアカウントをアップグレードしているので、スコープのみでユーザーを追加してから、追加して再ログインするplus.loginことをテストしました。その結果、承認済みアクセス パネルに新しいエントリが導入され、後者の呼び出しから返されたアクセス トークンには許可しかありませんでした。確認済みのトークン呼び出しを行い、人のリストを作成して、これをテストしました。userinfoplus.loginuserinfo

これは予想される動作ですか? もしそうなら、事前に古いトークンを取り消す必要がありますか? アクションで可能だと思います/revokeサーバー側の Oauth トークンの削除

更新:関連する Gist。これは Ruby の Omniauth gem を使用しています。ユーザーが認証済みアクセス パネルで複数のエントリをどのように見ることができるかは実際にはわかりませんが、この状況では 2 つを見ることができました。昨日さまざまなシナリオをテストした後、約 6 つのエントリがすべて同じアプリに属していました。クライアント ID は一度も変更していないことに注意してください。実際、クライアント ID は 1 つしかありません。

私が説明した状況が他の人によって再現されることを願っています。Google 側の URL をハッキングして plus.login スコープを削除し、URL をそのまま保持して再度ログインするだけです。

更新 (2): また、この落とし穴を発見しました:「userinfo.profile または plus.me をこのスコープと組み合わせて要求しないでください。これらは暗黙的に含まれており、ユーザーにとって紛らわしい権限ダイアログが作成されるためです。」実際、これは単なる UX パーミッションの問題ではありません。Googleは実際にはユーザーに対して「plus.me」スコープを保存しないようです。つまり、ユーザーがすでにアクセス許可を与えていても、OAuthアクセス許可ダイアログが常に表示されることを意味します(単純な同等性チェックと通知プラスを行うためだと思います.me が要求されますが、ユーザーに対して保存されません)。

更新 (3): 間違ったログインの使用に関するバグは、私のコードが user.login || のようなことを行っていることが原因でした。ログイン時にトークン データを更新せずに user.signup を実行します。そのため、ログインのたびにアクセス トークンとリフレッシュ トークンが更新されるようになりました。(クライアントとユーザーの組み合わせごとに複数のトークンが必要な理由はまだわかりません。)

4

2 に答える 2

3

おそらく、新しいクライアントを発行する前に、以前に認証されたクライアントのトークンを取り消していませんか?

スコープをアップグレードした後の取り消しが次の JavaScript デモで機能することをテストできます。

  1. このページを使用して承認します。(許可されたクライアントを切断しないでください)
  2. このページを使用して承認をアップグレードします。このページには、例としてカレンダー スコープが含まれており、同じクライアントが含まれています。
  3. ここで、発行された承認サブトークンのページを見ると、各クライアントに対応する 2 つのエントリがあることがわかります。
  4. 更新して切断ボタンをクリックし、2 ページ目から取り消します。
  5. 発行された認証サブトークン ページに戻ります。発行された許可されたサブトークンの両方のセットはなくなりました。

これをさらにテストし、プロジェクトに変更を加えて、ドライブ スコープを追加しました。API クライアント プロジェクトにスコープを追加し、追加のクライアントを承認した後、いずれかのトークンを取り消すと、そのプロジェクトから承認されたすべてのクライアントが取り消されます。

別のクライアントから既存の承認済み資格情報をアップグレードする場合は、既存のトークンをアップグレードするときに古いトークンを取り消して、期待どおりに機能しない資格情報のインスタンスが発生しないようにする必要があります。

ただし、デモからわかるように、同じ API クライアントからトークンを取り消すと、追加で発行された認証トークンが取り消されるため、以前に発行されたトークンを取り消すことを心配する必要はありません。

古いトークン (userinfo.email スコープの更新トークンなど) を取り消す最も良い理由は、そのトークンがアップグレードされていないにもかかわらず、後でそのトークンを使用して新しいスコープの API 呼び出しを試みる可能性があるためです。スコープが追加され、奇妙なバグが発生する可能性があります。

最後に、ユーザーがGoogle+ の [アプリの管理] ページから発行された認証トークンを確認することに慣れるようになることを願っています。これにより、接続されたアプリケーションのインスタンスの重複をより適切に排除できます。

于 2013-03-15T15:11:45.680 に答える
2

それは正しい振る舞いとは思えません。後の呼び出しからアクセス トークンを取得し、https://www.googleapis.com/oauth2/v1/tokeninfo?access_token =TOKEN_GOES_HERE にプラグインできますか?これにより、承認されているスコープが表示されます。

どのプラットフォームにも実装していましたか? 役立つスニペットがあれば!

更新: 以前に認証した後に plus.login を追加しようとしたところ、新しい同意ダイアログが表示されたので、すべてが非常にスムーズに見えました. クライアント固有の問題である可能性がありますか?

于 2013-03-15T08:24:51.700 に答える