Google OAuth - 如何检查用户是否已允许访问我的应用程序
Google OAuth - How to check that user has already allowed access to my application
简短描述:
如果用户已经授予我的应用程序 OAuth 访问他们的 google 配置文件的权限,我想让他们免于每次登陆我的主页并登录时都必须按 "sign in using google" 按钮自动进入。
如果用户尚未授予访问权限,我想向他们展示带有 "sign in using google" 按钮的登录选项页面。
详细说明:
我正在实施 Google OAuth 流程,如此 link:
Using OAuth 2.0 for Web Server Applications
为清楚起见,有问题的流程如下:
- 使用 "sign in using google" 按钮呈现(客户端)用户
- 用户按下按钮后,将他们重定向到 google 的 OAuth 2.0 服务器,在那里他们 allow/deny 我的应用程序可以访问他们的 google 配置文件
- 如果用户允许访问,google 将他们重定向回我的应用程序
- 我的应用程序(服务器端)使用获取的授权来获取访问令牌
- 我的应用程序(服务器端)使用获取的访问令牌访问用户的配置文件
我想实现以下目标:
如果用户之前已经允许我的应用程序访问他们的 google 配置文件(在当前计算机或其他计算机上),我希望他们有一个登录我的应用程序的印象(使用 google) 在他们导航到我的应用程序的 URL 后立即。无需点击任何东西。
乍一看这不是问题。为此,我将自动化上述流程的第 1 步和第 2 步。用户将在导航到应用程序的 URL 后立即自动重定向到 google oauth 服务器 - 无需按 "sign in using google" 按钮。 Google 又立即通过有效授权将用户重定向回我的应用程序(同样不需要用户输入任何内容)。其余的保持不变。用户会有立即登录的印象。
不过这种方法有一个问题。如果用户是第一次访问我的页面(之前没有授予我的应用程序访问权限),他们也会被重定向到 google OAuth 页面。但是由于他们还没有授予访问权限,也没有按下任何输入按钮,他们最终会盯着 google oauth 服务器页面,困惑地不知道发生了什么。
是否有一些 API,通过它我可以检测到用户尚未授予访问我的应用程序的权限(我应该先向他展示加入按钮)?
请,如果您的解决方案涉及一些 API 调用,请将我指向 HTTP/REST API,因为我不使用(也不想使用)更高级别 OAuth 库。
谢谢。
将 "prompt=none" 参数添加到您的初始 OAuth 重定向。这样 google 不会在用户未登录或未授予您的应用程序权限时阻止。
参见 http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
的第 3.1.2.1 章
其他可能的 "prompt" 值的简短摘要:
- none - 不会提示任何内容,如果无法静默登录,则返回错误 "login_required" 或 "interaction_required"。
- 登录 - 强制登录提示,即使用户已登录。
- 同意 - 强制显示同意提示,即使用户过去曾提供过同意。
- select_account - 显示帐户选择提示。
简短描述:
如果用户已经授予我的应用程序 OAuth 访问他们的 google 配置文件的权限,我想让他们免于每次登陆我的主页并登录时都必须按 "sign in using google" 按钮自动进入。
如果用户尚未授予访问权限,我想向他们展示带有 "sign in using google" 按钮的登录选项页面。
详细说明:
我正在实施 Google OAuth 流程,如此 link:
Using OAuth 2.0 for Web Server Applications
为清楚起见,有问题的流程如下:
- 使用 "sign in using google" 按钮呈现(客户端)用户
- 用户按下按钮后,将他们重定向到 google 的 OAuth 2.0 服务器,在那里他们 allow/deny 我的应用程序可以访问他们的 google 配置文件
- 如果用户允许访问,google 将他们重定向回我的应用程序
- 我的应用程序(服务器端)使用获取的授权来获取访问令牌
- 我的应用程序(服务器端)使用获取的访问令牌访问用户的配置文件
我想实现以下目标:
如果用户之前已经允许我的应用程序访问他们的 google 配置文件(在当前计算机或其他计算机上),我希望他们有一个登录我的应用程序的印象(使用 google) 在他们导航到我的应用程序的 URL 后立即。无需点击任何东西。
乍一看这不是问题。为此,我将自动化上述流程的第 1 步和第 2 步。用户将在导航到应用程序的 URL 后立即自动重定向到 google oauth 服务器 - 无需按 "sign in using google" 按钮。 Google 又立即通过有效授权将用户重定向回我的应用程序(同样不需要用户输入任何内容)。其余的保持不变。用户会有立即登录的印象。
不过这种方法有一个问题。如果用户是第一次访问我的页面(之前没有授予我的应用程序访问权限),他们也会被重定向到 google OAuth 页面。但是由于他们还没有授予访问权限,也没有按下任何输入按钮,他们最终会盯着 google oauth 服务器页面,困惑地不知道发生了什么。
是否有一些 API,通过它我可以检测到用户尚未授予访问我的应用程序的权限(我应该先向他展示加入按钮)?
请,如果您的解决方案涉及一些 API 调用,请将我指向 HTTP/REST API,因为我不使用(也不想使用)更高级别 OAuth 库。
谢谢。
将 "prompt=none" 参数添加到您的初始 OAuth 重定向。这样 google 不会在用户未登录或未授予您的应用程序权限时阻止。
参见 http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
的第 3.1.2.1 章其他可能的 "prompt" 值的简短摘要:
- none - 不会提示任何内容,如果无法静默登录,则返回错误 "login_required" 或 "interaction_required"。
- 登录 - 强制登录提示,即使用户已登录。
- 同意 - 强制显示同意提示,即使用户过去曾提供过同意。
- select_account - 显示帐户选择提示。