为混合应用程序使用 Google 进行身份验证时出现 401 Unauthorized
401 Unauthorized when authenticating with Google for hybrid applications
我想使用本机应用程序和 Web 服务器获取刷新令牌以用于某些操作(在 google 驱动器上)。已使用 Google developer console.
为本机和 Web 应用程序生成客户端 ID 和机密
我正在尝试从本机应用程序生成授权码,并使用深受 java example 启发的脚本从 Web 服务器交换它们以获得 access/refresh 令牌。主要区别在于有两个 GoogleAuthorizationCodeFlow(它们代表本机和服务器部分):
- 一个使用本机应用程序的 ID 和密码,用于生成授权码。
- 一个使用 Web 应用程序 ID 和密码,用于交换凭据的授权代码。
但是,这样的过程确实会导致 401 未经授权的异常。
当为两个 GoogleAuthorizationCodeFlows 使用相同的凭据时,无论是本机应用程序的凭据还是 Web 应用程序的凭据,该过程都会成功并且 returns 一个刷新令牌。
如何在 Web 应用程序上使用本机应用程序的授权代码来生成访问令牌?有没有一种方法可以使用 Web 应用程序 ID 和机密来交换授权代码,或者必须使用用于生成令牌的相同凭证来完成程序?
它不起作用的原因是身份验证链接到客户端 ID 和客户端密码。
当用户进行身份验证时,他们正在对客户端 ID/客户端密码对进行身份验证。您不能只获取刷新令牌或身份验证代码并将其与它们不匹配的不同客户端 ID 和密码一起使用,并且它不会工作,您将得到 401 Unauthorized exception
.
你在
的正确轨道上
How can I use the authorization code from a native application on a
web application to generate access tokens?
您需要做的是创建 Client ID for native application
一个,并为您的本机应用程序和 Web 应用程序使用客户端 ID 和客户端密码。
网络与原生
Client ID for native application
和 Client ID for web application
之间唯一真正的区别是重定向 URI。重定向 URI 只是告诉身份验证服务器 return 身份验证到哪里。对于一个很简单的网站,它是您大部分时间处理代码的网页,这是相同的 IP 地址。在本机应用程序的情况下,没有办法知道这一点,因此服务器将信息发送回请求的 ip。除此之外,确实没有区别,除了可能 Google 想知道它是网站还是已安装的应用程序 运行 代码可能。因此,您可以在 Web 应用程序上使用本机客户端 ID,服务器将 return 将其发送到它要求的任何位置。
安全
在 Web 应用程序上使用本机应用程序可能存在一些安全考虑,我猜有人可能会获取它并使用您的客户端 ID 发送信息。 TBH 我发现这个机会有限。
我想使用本机应用程序和 Web 服务器获取刷新令牌以用于某些操作(在 google 驱动器上)。已使用 Google developer console.
为本机和 Web 应用程序生成客户端 ID 和机密我正在尝试从本机应用程序生成授权码,并使用深受 java example 启发的脚本从 Web 服务器交换它们以获得 access/refresh 令牌。主要区别在于有两个 GoogleAuthorizationCodeFlow(它们代表本机和服务器部分):
- 一个使用本机应用程序的 ID 和密码,用于生成授权码。
- 一个使用 Web 应用程序 ID 和密码,用于交换凭据的授权代码。
但是,这样的过程确实会导致 401 未经授权的异常。
当为两个 GoogleAuthorizationCodeFlows 使用相同的凭据时,无论是本机应用程序的凭据还是 Web 应用程序的凭据,该过程都会成功并且 returns 一个刷新令牌。
如何在 Web 应用程序上使用本机应用程序的授权代码来生成访问令牌?有没有一种方法可以使用 Web 应用程序 ID 和机密来交换授权代码,或者必须使用用于生成令牌的相同凭证来完成程序?
它不起作用的原因是身份验证链接到客户端 ID 和客户端密码。
当用户进行身份验证时,他们正在对客户端 ID/客户端密码对进行身份验证。您不能只获取刷新令牌或身份验证代码并将其与它们不匹配的不同客户端 ID 和密码一起使用,并且它不会工作,您将得到 401 Unauthorized exception
.
你在
的正确轨道上How can I use the authorization code from a native application on a web application to generate access tokens?
您需要做的是创建 Client ID for native application
一个,并为您的本机应用程序和 Web 应用程序使用客户端 ID 和客户端密码。
网络与原生
Client ID for native application
和 Client ID for web application
之间唯一真正的区别是重定向 URI。重定向 URI 只是告诉身份验证服务器 return 身份验证到哪里。对于一个很简单的网站,它是您大部分时间处理代码的网页,这是相同的 IP 地址。在本机应用程序的情况下,没有办法知道这一点,因此服务器将信息发送回请求的 ip。除此之外,确实没有区别,除了可能 Google 想知道它是网站还是已安装的应用程序 运行 代码可能。因此,您可以在 Web 应用程序上使用本机客户端 ID,服务器将 return 将其发送到它要求的任何位置。
安全
在 Web 应用程序上使用本机应用程序可能存在一些安全考虑,我猜有人可能会获取它并使用您的客户端 ID 发送信息。 TBH 我发现这个机会有限。