当我强制用户第二次使用approval_prompt=force
重新授权我的应用时,如何让Google向用户显示我的应用请求的整个权限列表?
详细说明:
我有一个Web应用程序,它要求一组Google API权限,包括access_type=offline
。我第一次批准它时,会显示正确的同意页面,列出所有权限,如下所示:
稍后,我将用户发回给Google授权,使用相同的参数。第二次,它只显示“有离线访问”:
为什么不向用户显示所有权限?有没有办法强制它第二次询问用户所有权限?为什么它现在第一次显示“有脱机访问权限”?
我们的用户发现我们的应用不会要求任何实际权限令人困惑,所以我宁愿再次显示第一个审批屏幕。
我正在进行的请求的完整参数如下。网址:
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
这个想法是,如果用户已经授予了应用程序的权限,则无需显示相同的权限并要求用户批准。
如果您正确编写了应用程序,则不应出现这种情况。如果您请求脱机代码(刷新令牌)并将其存储在后端,除非您需要获得一些新的范围/权限,否则不应再次要求它。您应该使用以后存储的刷新令牌。如果您在站点上只需要访问令牌,则可以使用其他流来请求访问令牌,而无需用户看到批准页面。
答案 1 :(得分: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
中调用此网络进程