web-dev-qa-db-ja.com

access_type = onlineの場合、「このアプリの目的:オフラインアクセスが必要」

OAuth 2.0認証を使用したGoogleアプリがあります。すべてが正常に機能していましたが、最近、次の「許可のリクエスト」画面が表示され始めました。

enter image description here

奇妙な部分は、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日):

新しいスコープでも、同意画面が表示されます。最近、認証に使用していた新しいデバイス用に入手しました。

58
Tzach

アプリがトークンを要求し、問題のスコープに対するユーザーの有効なアクセスまたは更新トークンがまだある場合、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
29
amwinter

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+サインインへの移行」を参照してください。

これにより、メールアドレスの受信方法も変更されます。

https://developers.google.com/+/api/auth-migration#email

また、これを機能させるには、管理コンソールでGoogle+ APIをアクティブにする必要があることに注意してください。

19
dominik

OAuth要求のhttp://localhostパラメーターでredirect_urlを使用すると、ユーザーは各ログイン後に初めて認証するときにオフラインアクセスを許可するように求められます。

18
Ian Mackinnon

ツァッハ。最初のログイン後に同意画面を表示しないようにするため。関数に値を渡すためにこれが必要になる場合があります。

$ client-> setApprovalPrompt( "auto");

5
CK Tan

これは答えられたと思いますが、今すぐリンクを見つけることができません。

簡単に言えば、Googleは最近、増分スコープを実装するためにスコープの周りにいくつかの変更を加えました。これらの変更の一部は、アプリが認証プロンプトを表示し、ユーザーが既に認証している場合、Googleは何かを要求する必要があるため、オフラインアクセスを要求することです。設定してみてください

approval_Prompt=auto

プロンプトを回避するには

1
pinoyyid

私は同じ問題を抱えていました。設定していませんでしたが

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 その概念に異議を唱えるようではないので、なぜこのように動作するのかわかりません。しかし、少なくとも今のところは、思い通りに機能させることができました。

1
Paul Brackin

まあ、これが実際に答えを構成するかどうかはわかりませんが、someユーザーが以下を見ることがわかりました:

「オフラインアクセス」

他の人(あなたが見たいと思うものを得る人)と比較して:

「アカウントに関する基本情報を表示する」

0
jmazin