首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么当我再次将用户发送到auth url时,Google OAuth2会重新询问用户的权限。

为什么当我再次将用户发送到auth url时,Google OAuth2会重新询问用户的权限。
EN

Stack Overflow用户
提问于 2012-05-09 01:00:14
回答 4查看 20K关注 0票数 24

使用旧的google,当我将一个用户(之前选择了我的应用程序)发送到auth url时,它会立即将他们重定向回我的应用程序。

现在,对于OAuth2,auth不断向用户请求许可。我读了一些关于这方面的文档,但我所不明白的是这个流程是如何工作的:

  1. 用户通过我的应用程序登录到google,然后单击 for
    1. ,cookies被清除,用户返回我的站点,单击“登录到google”
    2. 用户不再被请求许可,他们将立即登录。

我认为这与在步骤1中存储auth令牌或刷新令牌有关,但在步骤3中,我不知道它们是谁,所以如何将它们与适当的auth或刷新令牌匹配以获得有效的访问令牌。

在我的测试中,当我在步骤1中将它们发送到原始的auth url时,它们将再次被请求权限。

编辑:找到解决方案

google在创建auth时默认放置"approval_prompt=force“。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-12 19:07:02

是的,正如您已经注意到的,使用approval_prompt=force URL参数将强制每次向用户显示auth对话框。通过简单地删除这个URL参数,用户将不会在随后的auth流上被提示。

如果使用服务器端流(response_type=code)和离线访问(access_type=offline),您将得到的响应略有不同。当用户第一次授权您时(当他看到审批屏幕时),或者如果您通过使用approval_prompt=force强制执行此操作,那么当您交换auth代码时,您将获得一个refresh_token和一个access_token

但是,每当用户没有在审批屏幕上显示时(当不使用approval_prompt=force时,随后的auth ),当交换auth代码时,您将只被授予一个access_token,而不是refresh_token。因此,如果这是您正在使用的流,如果您希望能够脱机访问用户的数据,则需要确保在第一次获得refresh_token时将其保存在本地供将来使用。

只有当您请求访问另一种类型的数据时,才可能发生这种情况,而不是简单地请求访问auth数据(使用OAuth 2流,您可以请求访问其他数据,例如,联系人API数据、日历API数据、驱动器数据等等)。通常,正常的开放ID流不需要脱机访问。

票数 26
EN

Stack Overflow用户

发布于 2016-10-17 17:37:11

只是在请求中传递一个额外的参数,'approval_prompt=auto'对我起了作用。

票数 0
EN

Stack Overflow用户

发布于 2017-06-13 16:45:01

对我来说,它是hd (托管域)参数。在从授权url中删除之后,我得到了一个用户列表,供我选择8月使用。关于hd参数的更多信息,这里是https://developers.google.com/identity/protocols/OpenIDConnect#hd-param

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10508557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档