Google api 如何在没有用户干预的情况下授权应用程序(web或已安装)?

Google api 如何在没有用户干预的情况下授权应用程序(web或已安装)?,google-api,google-drive-api,google-oauth,gmail-api,Google Api,Google Drive Api,Google Oauth,Gmail Api,假设我有一个web应用程序(“mydriveapp”),需要在后台服务中访问驱动器文件。它将拥有它正在访问的文件,或者在所有者共享文档的Google帐户中运行 我知道我的应用程序需要一个刷新令牌,但我不想编写代码来获得它,因为我只会做一次 NB。这不是使用服务帐户。该应用程序将在传统的谷歌帐户下运行。在某些情况下,服务帐户是一种有效的方法。但是,使用Oauth Playerly模拟应用程序的技术可以节省大量的冗余工作,并且适用于不支持共享到服务帐户的任何API。这可以通过以下方式使用Oauth

假设我有一个web应用程序(“mydriveapp”),需要在后台服务中访问驱动器文件。它将拥有它正在访问的文件,或者在所有者共享文档的Google帐户中运行

我知道我的应用程序需要一个刷新令牌,但我不想编写代码来获得它,因为我只会做一次


NB。这不是使用服务帐户。该应用程序将在传统的谷歌帐户下运行。在某些情况下,服务帐户是一种有效的方法。但是,使用Oauth Playerly模拟应用程序的技术可以节省大量的冗余工作,并且适用于不支持共享到服务帐户的任何API。

这可以通过以下方式使用Oauth 2 Playerly完成:

步骤:-

  • 创建Google帐户(例如my.drive)。app@gmail.com)-如果您使用的是现有帐户,请跳过此步骤
  • 使用API控制台注册mydriveapp(或仅注册)
  • 创建一组新的凭据<代码>凭据/创建凭据/OAuth客户端Id然后选择
    Web应用程序
  • 包含为有效的重定向URI
  • 注意客户端ID(web应用程序)和客户端密码
  • 以my.drive登录。app@gmail.com
  • 去Oauth2游乐场
  • 在设置(档位图标)中,设置
    • OAuth流:服务器端
    • 访问类型:脱机
    • 使用您自己的OAuth凭据:勾选
    • 客户端Id和客户端机密:从步骤5开始
  • 单击步骤1并选择DriveAPIv3(如上所述,此技术也适用于列出的任何Google API)
  • 单击授权API。您将被提示选择您的谷歌帐户并确认访问
  • 单击步骤2和“交换令牌的授权码”
  • 复制返回的刷新令牌并将其粘贴到您的应用程序、源代码或某种形式的存储中,您的应用程序可以从中检索它
  • 您的应用现在可以在无人值守的情况下运行,并使用所述的刷新令牌来获取访问令牌

    注意。请注意,刷新令牌可能会被Google过期,这意味着您需要重复步骤5以获得新的刷新令牌。这种情况的症状是当您尝试使用刷新令牌时返回的授权无效

    NB2。如果您想要一个web应用程序访问您自己的(并且只访问您自己的)驱动器帐户,而不必费心编写只运行一次的授权代码,那么这种技术非常有效。只需跳过步骤1,并在步骤6中用您自己的电子邮件地址替换“my.drive.app”。如果刷新令牌被盗,请确保您了解安全隐患

    见伍迪在下面的评论,他链接到谷歌视频

    。 .

    下面是一个快速JavaScript例程,它演示了如何使用OAuth游乐场中的刷新令牌来列出一些驱动器文件。您可以简单地将其复制粘贴到Chrome开发控制台中,或者使用node运行它。当然,请提供您自己的凭证(下面的凭证都是假的)


    让我为pinoyyid的优秀答案添加一条替代路线(这对我来说不起作用-弹出重定向错误)

    除了使用OAuthAPI,您还可以直接使用HTTPRESTAPI。所以皮诺伊德回答的不同之处在于,我们会在本地做一些事情。按照pinoyyid回答中的步骤1-3进行操作。我会引用他们的话:

  • 创建Google帐户(例如my.drive)。app@gmail.com)-如果您使用的是现有帐户,请跳过此步骤
  • 使用API控制台注册mydriveapp(或仅注册)
  • 创建一组新凭据(NB OAuth客户端ID不是服务帐户密钥,然后从选择中选择“Web应用程序”)
  • 现在,将以下内容添加到您的凭据中,而不是操场:

    授权的JavaScript源代码:(我不知道是否需要这样做,但只要这样做即可。)
    授权重定向URI:

    截图(德语):

    确保通过下面的蓝色按钮实际保存更改

    现在,您可能需要使用GUI来构建HTTP请求。我用过,但你可以用卷发或普通卷发。我推荐失眠,因为它可以让你很容易地通过同意屏幕

    使用以下参数生成新的GET请求:

    URL: https://accounts.google.com/o/oauth2/v2/auth
    Query Param: redirect_uri=http://localhost:8080
    Query Param: prompt=consent
    Query Param: response_type=code
    Query Param: client_id=<your client id from OAuth credentials>
    Query Param: scope=<your chosen scopes, e.g. https://www.googleapis.com/auth/drive.file>
    Query Param: access_type=offline
    
    code=<the authorization code from the last step>
    client_id=<your client ID again>
    client_secret=<your client secret from the OAuth credentials>
    redirect_uri=http://localhost:8080
    grant_type=authorization_code
    
    并通过
    节点index.js运行服务器。我建议不要记录整个
    req
    对象,或者运行
    node index.js | less
    ,因为完整的输出将是巨大的。
    其他语言也有非常简单的解决方案。例如,在8080
    PHP-s localhost:8080
    上使用PHP内置的web服务器

    现在启动您的请求(在“失眠”中),系统将提示您登录:

    使用您的电子邮件和密码登录并确认同意屏幕(应包含您选择的范围)

    返回终端并检查输出。如果您记录了整个事件,请向下滚动(例如,pgdown in less),直到看到一行
    code=4/…

    复制该代码;这是您要交换访问和刷新令牌的授权码。不要复制太多-如果有符号和
    &
    ,不要复制它或之后的任何东西<代码>&
    限定查询参数。我们只需要
    代码

    现在设置一个指向
    https://www.googleapis.com/oauth2/v4/token
    作为表单URL编码。在其他工具中,您可能需要自己将标题设置为
    内容类型:application/x-www-form-urlencoded

    添加以下参数:

    URL: https://accounts.google.com/o/oauth2/v2/auth
    Query Param: redirect_uri=http://localhost:8080
    Query Param: prompt=consent
    Query Param: response_type=code
    Query Param: client_id=<your client id from OAuth credentials>
    Query Param: scope=<your chosen scopes, e.g. https://www.googleapis.com/auth/drive.file>
    Query Param: access_type=offline
    
    code=<the authorization code from the last step>
    client_id=<your client ID again>
    client_secret=<your client secret from the OAuth credentials>
    redirect_uri=http://localhost:8080
    grant_type=authorization_code
    
    您可以立即使用
    访问\u令牌
    ,但它的有效期仅为一小时。请注意刷新标记。这是您始终可以*交换新访问令牌的令牌

    *
    您将拥有