我想使用本机应用程序和Web服务器来获取用于某些操作的刷新令牌(在谷歌驱动器上)。已使用Google developer console为本机和Web应用程序生成客户端ID和机密。
我尝试从本机应用程序生成authcodes,并使用受Java example启发的脚本从Web服务器交换它们以访问/刷新令牌。主要区别在于有两个GoogleAuthorizationCodeFlow(它们代表本机和服务器部分):
然而,此类程序会导致401 Unauthorized异常。
当同时使用GoogleAuthorizationCodeFlows相同的凭据(本机应用程序的信誉或Web应用程序的凭据)时,该过程会成功并返回刷新令牌。
如何使用Web应用程序上的本机应用程序的授权代码生成访问令牌?有没有办法使用Web应用程序ID和密钥来交换授权代码,或者必须使用用于生成令牌的相同凭据来完成过程?
答案 0 :(得分:0)
它不起作用的原因是身份验证链接到客户端ID和客户端密钥。
当用户进行身份验证时,他们正在验证该客户端ID /客户端密钥对。你不能只使用刷新令牌或身份验证代码,并使用不同的客户端ID和秘密,他们将无法匹配,它将无法工作,你将获得401 Unauthorized exception
。
你的正确轨道
如何在a上使用本机应用程序的授权代码 用于生成访问令牌的Web应用程序?
您需要做的只是创建一个Client ID for native application
,并为您的本机应用程序和Web应用程序使用客户端ID和客户端密钥。
网络与原生
Client ID for native application
和Client ID for web application
之间唯一真正的区别是重定向URI。重定向URI只告诉身份验证服务器将身份验证返回到何处。在网站很容易的情况下,您可以在大多数情况下处理代码的网页,这是相同的IP地址。在本机应用程序的情况下,无法知道这一点,因此服务器将信息发送回请求的ip。除此之外,确实没有区别,除非谷歌喜欢知道它的网站或运行代码的已安装应用程序是否可能。因此,您可以在Web应用程序上使用本机客户端ID,服务器只会将其返回到它所要求的位置。
安全强>
在Web应用程序上使用本机可能存在一些安全方面的考虑因素,我想有人可能会对其进行控制并使用您的客户端ID发送信息。 TBH我发现这种情况有限。