在没有浏览器的嵌入式设备上使用 google api 访问应用程序中的用户数据

Accessing user data in a application using google api on an embedded device without a browser

所以,这是我对 Google Oauth2 工作原理的理解。

  1. 每个应用程序或网站(客户端)都需要注册其项目并获得 client_id 和客户端密码。

  2. 客户端使用 client_id 和重定向 uri 代表登录用户向 auth url 发出授权请求。

  3. 发生这种情况时,会弹出一个窗口,提示用户(资源所有者)允许或拒绝客户端访问用户受保护的资源。

  4. 如果用户接受,则用户将被重定向到客户端或应用程序可以从中获取授权代码的重定向 uri。

  5. 此授权码进一步交换为来自 OAUTH URL 的访问令牌。此访问令牌稍后用于 Api 调用客户端 make。

问题出在第 3 步。我不是 运行 网络应用程序或网站。而是一个可以进行 curl 函数调用的应用程序。第 4 步和第 5 步是可行的,但是,由于我没有浏览器功能,如何绕过第 3 步?有可能吗?

还有人可以告诉我 android 应用程序是如何做到的吗?因为即使是 android 应用也不应该有内置浏览器。提前致谢

  1. Every application or a website (client) needs to register its project and get a client_id and a client secret.

更正/澄清: 任何希望访问私有 Google 数据的应用程序必须首先在 Google 开发者控制台上注册。如果要访问的数据是 public,则可以使用 API 密钥。如果数据是私有的,则必须创建 Oauth2 凭据或服务帐户凭据。

Oauth2 凭据 允许用户授予应用程序访问其部分数据(由范围表示)的权限,该应用程序由客户端 ID 和客户端密码标识。

服务帐户 将允许预授权访问通常由开发应用程序的开发人员拥有的私有数据。他们不会弹出用户身份验证请求。请参阅我关于此的文章 Google Developer console service account 我不想在这里进入服务帐户,因为你似乎关心 Oauth2。

2 . The client_id and a redirect uri are used by the client to make an authorization request to the auth url on behalf of the user who is logged in.

更正/澄清: Oauth2 舞蹈的第一步是向用户请求访问权限。这是通过网页完成的。

https://accounts.google.com/o/oauth2/auth?client_id={clientid}.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code

Redirect uri 用于告诉认证服务器return授权码到哪里。如果这是一个网页应用程序,它将是能够处理流程中后续步骤的网页的完整位置。如您所见,我没有放入网页。这在某种意义上是本地主机。它告诉身份验证服务器只 return 将代码发送到我刚刚发送请求的位置。它用于 windows 应用程序,可能 android 虽然我不是 android 程序员,所以我不确定它是否只是一个有根据的猜测。

4.If the user accepts then the user is redirected to the redirect uri from where the client or the application can get the authorization code.

更正/澄清: 可能是您的代码重定向了您。我不认为它是服务器重定向你,但我可能是错的。身份验证服务器可以在您希望的任何时候发送代码,这将由开发人员在交换后将用户重定向到某个地方。

5.This 授权代码进一步交换为来自 OAUTH URL 的访问令牌。此访问令牌稍后用于 Api 调用客户端 make。

更正/澄清:访问令牌只能使用一个小时,您可能还会得到一个刷新令牌,可用于获取新的访问令牌。

解决您的问题

The problem is with the step 3. I am not running a web app or a website. Rather an application that can make curl function calls. Step 4 and step 5 are doable but, How do I bypass the step 3 as I don't have browser capabilities? Is it even possible?

这将取决于您要查找的 api 以及这是谁的数据。如果这是您的用户拥有的数据,则请求他们访问并保存刷新令牌,然后当您需要在 curl 脚本中再次访问它时,您只需获取一个新的访问令牌即可访问。这只是您需要打扰用户的初始授权。

第二种选择,如果这是您个人有权访问的数据,您可以使用服务帐户。服务帐户就像虚拟用户一样,您可以预先授权他们的访问权限。我可以创建一个服务帐户,将其作为用户添加到我的 google 驱动器中的文件夹中,然后它就可以读取和写入我的 google 驱动器而无需弹出 window。

Also can someone please tell how an android app does it? Because even the android app shouldn't have an inbuilt browser. Thanks in advance

我不是 android 开发人员,我认为 Android SDK 中的一部分是神奇的,您为 android 应用程序获得的凭据甚至不同。真的帮不上这个忙。

我们有 OAuth2 for Devices 流程来处理您试图解决的问题 See this

用户可以从具有网络浏览器的其他设备授权该应用程序。