401在使用Google进行混合应用程序身份验证时未经授权

时间:2015-05-19 10:57:28

标签: google-api google-oauth

我想使用本机应用程序和Web服务器来获取用于某些操作的刷新令牌(在谷歌驱动器上)。已使用Google developer console为本机和Web应用程序生成客户端ID和机密。

我尝试从本机应用程序生成authcodes,并使用受Java example启发的脚本从Web服务器交换它们以访问/刷新令牌。主要区别在于有两个GoogleAuthorizationCodeFlow(它们代表本机和服务器部分):

  • 使用本机应用程序的ID和密码并用于生成授权码。
  • 使用网络应用程序ID和密码并用于交换凭据的授权代码。

然而,此类程序会导致401 Unauthorized异常。

当同时使用GoogleAuthorizationCodeFlows相同的凭据(本机应用程序的信誉或Web应用程序的凭据)时,该过程会成功并返回刷新令牌。

如何使用Web应用程序上的本机应用程序的授权代码生成访问令牌?有没有办法使用Web应用程序ID和密钥来交换授权代码,或者必须使用用于生成令牌的相同凭据来完成过程?

1 个答案:

答案 0 :(得分:0)

它不起作用的原因是身份验证链接到客户端ID和客户端密钥。

当用户进行身份验证时,他们正在验证该客户端ID /客户端密钥对。你不能只使用刷新令牌或身份验证代码,并使用不同的客户端ID和秘密,他们将无法匹配,它将无法工作,你将获得401 Unauthorized exception

你的正确轨道

  

如何在a上使用本机应用程序的授权代码   用于生成访问令牌的Web应用程序?

您需要做的只是创建一个Client ID for native application,并为您的本机应用程序和Web应用程序使用客户端ID和客户端密钥。

网络与原生

Client ID for native applicationClient ID for web application之间唯一真正的区别是重定向URI。重定向URI只告诉身份验证服务器将身份验证返回到何处。在网站很容易的情况下,您可以在大多数情况下处理代码的网页,这是相同的IP地址。在本机应用程序的情况下,无法知道这一点,因此服务器将信息发送回请求的ip。除此之外,确实没有区别,除非谷歌喜欢知道它的网站或运行代码的已安装应用程序是否可能。因此,您可以在Web应用程序上使用本机客户端ID,服务器只会将其返回到它所要求的位置。

安全

在Web应用程序上使用本机可能存在一些安全方面的考虑因素,我想有人可能会对其进行控制并使用您的客户端ID发送信息。 TBH我发现这种情况有限。