2013-12-12 9 views
8

approval_prompt=forceを使用してユーザーに再度アプリケーションを再認証するように強制すると、Googleに自分のアプリケーションのすべての権限リストを表示するにはどうすればよいですかリクエストしていますか?Google OAuth2再承認に同意ページの権限がありません

詳細:

私はaccess_type=offlineなど、GoogleのAPIの権限のセットを要求するWebアプリケーションを持っています。私はそれを承認する最初の時間は、それはのように見えるすべての権限を、一覧表示、正しい同意ページを示しています

first time Google OAuth2 consent page

その後、私は同じパラメータで、グーグルで認可するために戻って、ユーザを送ります。二回目は、それだけで「オフラインアクセスを持っている」を示しています。

enter image description here

なぜそれがユーザーにすべての権限が表示されませんか?ユーザーにすべての権限を2度尋ねるように強制する方法はありますか?初めて「オフラインアクセスする」と表示されるのはなぜですか?

私たちのユーザーは、私たちのアプリが実際の権限を求めていないことを混乱させるので、最初の承認画面をもう一度表示するだけです。

私が作成しているリクエストの完全なパラメータは次のとおりです。 URL:勃発

https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=1039955146864.apps.googleusercontent.com&redirect_uri=http://localhost:8081/sync/google/callback&response_type=code&scope=openid%20email%20https://www.googleapis.com/auth/admin.directory.group.readonly%20https://www.googleapis.com/auth/admin.directory.group.member.readonly%20https://www.googleapis.com/auth/admin.directory.user.readonly&state=480704597031619284232891277399900450622 

パラメータ:

access_type:offline 
approval_prompt:force 
client_id:1039955146864.apps.googleusercontent.com 
redirect_uri:http://localhost:8081/sync/google/callback 
response_type:code 
scope:openid email https://www.googleapis.com/auth/admin.directory.group.readonly https://www.googleapis.com/auth/admin.directory.group.member.readonly https://www.googleapis.com/auth/admin.directory.user.readonly 
state:480704597031619284232891277399900450622 
+0

に呼び出されなければなりません。あなたはまだ何かを考え出しましたか? –

答えて

8

我々は認証増分開始し、設計どおり、これは作業です。

http://googleplusplatform.blogspot.com/2013/12/google-sign-in-improvements11.html

アイデアは、ユーザーがすでにアプリに権限を付与している場合、同じ権限を表示し、承認をユーザーに依頼する必要がないです。

アプリケーションを正しく記述すると、このような状況は発生しません。オフラインコード(リフレッシュトークン)をリクエストしてバックエンドに格納する場合は、新しいスコープ/権限を取得する必要がある場合を除いて、再度要求する必要はありません。将来保存した更新トークンを使用する必要があります。ユーザーがサイトにいるときだけアクセストークンが必要な場合は、他のフローを使用して、ユーザーに承認ページが表示されないでアクセストークンを要求できます。

+0

ありがとうございました。私は "approval_prompt = force"で期待したものではありませんが(私はそれが再びすべての権限を要求すると思っていたと思います)、合理的です。私は何かをするために私のアプリを修正します。 –

+1

"アプリケーションを正しく書いた場合、このような状況は発生しません" ...リフレッシュトークンを受け取った場合にはどうしたら対処できますか?もう一度試してみると、ユーザーには「オフラインアクセスを許可する」という混乱したアクセス許可が表示されます。 –

+0

はい、それはもっとうまくやってより意味のあるページを表示する必要がある状況です。私たちは、a)すべてのスコープを再び表示することを考えています。b)メッセージを表示し、サインインに使用しようとしているアカウントを確認するようユーザーに依頼します。たとえば、「このアプリケーションにサインインするために使用するアカウントを選択してください。これは、ユーザーが複数のアカウントにサインインしている状況を管理し、別のアカウントでサインインしたい場合があります。 – nvnagr

0

アクセストークンを取り消してログアウトする必要があります。その後、サインインすると、許可が表示されます。

public static void RevokeAcess(String accessOrRefreshToken) throws ClientProtocolException, IOException 
{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+accessOrRefreshToken); 
    client.execute(post); 
} 

このネットワーク・プロセスは、我々は同じ問題を抱えている非UIスレッドまたはasyntask

関連する問題