OAuth 2.0認証を使用したGoogleアプリがあります。すべてが正常に機能していましたが、最近、次の「許可のリクエスト」画面が表示され始めました。
奇妙な部分は、access_type=online
を渡すとこの画面が表示されることです。繰り返しますが、これは最近まで機能していました。
これの原因は何ですか? TIA
編集:
要求されたスコープは次のとおりです。
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
私はすでに試しました:
access_type=online
の有無にかかわらずapproval_Prompt=auto
の有無にかかわらず編集#2:
これは、認証URLの生成に使用しているpythonコードです:
encoded_params = urllib.urlencode({
"response_type" : "code",
"client_id" : MY_CLIENT_ID,
"scope" : " ".join(MY_SCOPES),
"redirect_uri" : MY_REDIRECT_URI,
"state" : random_security_token,
"access_type" : "online",
"approval_Prompt" : "auto",
})
auth_url = "https://accounts.google.com/o/oauth2/auth?" + encoded_params
更新(10月14日):
新しいスコープでも、同意画面が表示されます。最近、認証に使用していた新しいデバイス用に入手しました。
アプリがトークンを要求し、問題のスコープに対するユーザーの有効なアクセスまたは更新トークンがまだある場合、Gはこれを行うと思います。
解決策は、次のリクエストを発行して、トークンの使用が完了したら(ユーザーのログアウト時またはユーザーの認証直後に)トークンを取り消すことです。
https://accounts.google.com/o/oauth2/revoke?token={token}
URLの引数としてトークンを提供するだけで、アプリの資格情報を提供する必要はありません。
(ドキュメントはこちら https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke )
同じ問題があり、access_type
またはapproval_Prompt
値はそれを解決するようでした。トークンを取り消すとうまくいきました。
あなたがたまたまそれらを保存しない限り、私はあなたのアプリのすべての未解決のトークンを取り消す方法がわかりません。独自のユーザーアカウントでテストするには、ここでアプリの既存のトークンを手動で取り消すことができます。
https://security.google.com/settings/security/permissions
Googleは最近、メールの範囲を変更しました。交換する必要があります
https://www.googleapis.com/auth/userinfo.email
で:
https://www.googleapis.com/auth/plus.profile.emails.read
そして:
https://www.googleapis.com/auth/plus.login
その後、オフラインアクセスが消えます。
こちらもご覧ください:
https://developers.google.com/+/api/oauth#email
警告:このスコープは非推奨です。 Googleは、2014年9月1日以降、このスコープをサポートしなくなります。詳細については、「Google+サインインへの移行」を参照してください。
これにより、メールアドレスの受信方法も変更されます。
また、これを機能させるには、管理コンソールでGoogle+ APIをアクティブにする必要があることに注意してください。
OAuth要求のhttp://localhost
パラメーターでredirect_url
を使用すると、ユーザーは各ログイン後に初めて認証するときにオフラインアクセスを許可するように求められます。
ツァッハ。最初のログイン後に同意画面を表示しないようにするため。関数に値を渡すためにこれが必要になる場合があります。
$ client-> setApprovalPrompt( "auto");
これは答えられたと思いますが、今すぐリンクを見つけることができません。
簡単に言えば、Googleは最近、増分スコープを実装するためにスコープの周りにいくつかの変更を加えました。これらの変更の一部は、アプリが認証プロンプトを表示し、ユーザーが既に認証している場合、Googleは何かを要求する必要があるため、オフラインアクセスを要求することです。設定してみてください
approval_Prompt=auto
プロンプトを回避するには
私は同じ問題を抱えていました。設定していませんでしたが
access_type=online
しかし、私の理解によれば、デフォルトは
access_type
は
online
From: https://developers.google.com/identity/protocols/OAuth2WebServer :「デフォルトのアクセススタイルはオンラインと呼ばれます。」
私にとってこれを解決したのは、削除することでした:
Prompt=consent
もちろん、最初の段階ではまだ同意フォームがありますが、今ではオフラインアクセスを求める同意フォームではなく、おそらく一部のユーザーを怖がらせています。
Promptパラメーターは、approval_Promptパラメーターの代替として意図されていると思います。しかし、「同意」に設定すると、「オフラインアクセス」の同意画面ではなく、通常の同意画面が毎回表示されるようになります。こちらのドキュメント: https://developers.google.com/identity/protocols/OpenIDConnect#Prompt その概念に異議を唱えるようではないので、なぜこのように動作するのかわかりません。しかし、少なくとも今のところは、思い通りに機能させることができました。
まあ、これが実際に答えを構成するかどうかはわかりませんが、someユーザーが以下を見ることがわかりました:
「オフラインアクセス」
他の人(あなたが見たいと思うものを得る人)と比較して:
「アカウントに関する基本情報を表示する」