oauth - Google OAuth - 如何检查用户是否已允许访问我的应用程序

标签 oauth oauth-2.0 google-oauth

简短说明:

如果用户已经授予我的应用程序 OAuth 访问他们的谷歌配置文件的权限,我想让他们每次登陆我的主页并自动登录时都不必按“使用谷歌登录”按钮。

如果用户尚未授予访问权限,我想向他们显示带有“使用谷歌登录”按钮的登录选项页面。

详细说明:

我正在按照此链接中的描述实现 Google OAuth 流程:

Using OAuth 2.0 for Web Server Applications

为了清楚起见,有问题的流程如下:

  • 使用“使用谷歌登录”按钮呈现(客户端)用户
  • 用户按下按钮后,将他们重定向到谷歌的 OAuth 2.0 服务器,在那里他们允许/拒绝我的应用程序访问他们的谷歌个人资料
  • 如果用户允许访问,谷歌会将他们重定向回我的应用程序
  • 我的应用程序(服务器端)使用获得的授权来获取访问 token
  • 我的应用程序(服务器端)使用获取的访问 token 访问用户的个人资料

  • 我想实现以下目标:

    如果用户之前已经允许我的应用程序访问他们的 google 配置文件(在当前计算机上或其他计算机上),我希望他们在导航到我的应用程序 URL 后立即登录到我的应用程序(使用 google)的印象。无需单击任何内容。

    这乍一看不是问题。为此,我将自动化上述流程的第 1 步和第 2 步。用户将被自动重定向到谷歌 oauth 服务器 - 无需按下“使用谷歌登录”按钮 - 在他们导航到应用程序的 URL 之后。反过来,Google 会立即通过有效授权将用户重定向回我的应用程序(同样不需要用户的任何输入)。其余保持不变。用户会有立即登录的印象。

    不过这种方法有问题。如果用户第一次访问我的页面(之前没有授予我的应用程序访问权限),他们也会被重定向到 google OAuth 页面。但是由于他们还没有授予访问权限,并且没有按下任何唱歌按钮,他们最终会盯着 google oauth 服务器页面感到困惑,不知道发生了什么。

    是否有一些 API,通过它我可以检测到用户尚未授予对我的应用程序的访问权限(我应该先向他显示唱歌按钮)?

    请,如果您的解决方案涉及一些 API 调用,请将我指向 HTTP/REST API,因为我不使用(也不想使用)任何更高级别的 OAuth 库。

    谢谢。

    最佳答案

    将“prompt=none”参数添加到您的初始 OAuth 重定向。这样,如果用户尚未登录或未授予您的应用权限,谷歌就不会阻止。

    参见 http://openid.net/specs/openid-connect-core-1_0.html#AuthRequest 的第 3.1.2.1 章

    其他可能的“提示”值的简短摘要:

  • none - 不会提示任何内容,如果无法进行静默登录,则重定向回错误“login_required”或“interaction_required”。
  • login - 强制登录提示,即使用户已登录。
  • 同意 - 强制同意提示,即使用户过去已提供同意。
  • select_account - 显示帐户选择提示。
  • 关于oauth - Google OAuth - 如何检查用户是否已允许访问我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598011/

    相关文章:

    python - 尝试在 Pyramid oauth 提供程序中生成请求 token 时出现无效签名错误

    android - Google Api 返回 "The API (Blogger API) is not enabled for your project.",即使我在控制台中启用了 Blogger API

    google-api - 无法刷新访问 token : response is "unauthorized_client"

    ios - Google OAuth 2.0 invalid_client 未经授权

    java - 无法使用 Oauth 找到我的项目的服务器客户端 secret

    java - Oauth "An Authentication object was not found in the SecurityContext"

    c# - Twitter 流 API C#

    ios - iOS 上的 Instagram Oauth 重定向

    oauth - 使用 Google OAuth2.0 在文档中针对 refresh_token 进行精确 POST 时出现 400 错误请求错误

    authentication - NextJS OAuth2 认证服务器端没有 express