我想使用本机应用程序和Web服务器来获取用于某些操作的刷新令牌(在Google Drive上)。使用Google开发人员控制台为本机和Web应用程序生成了客户ID和秘密。
我正在尝试从本机应用程序中生成验证码,并使用从Java示例中启发的脚本从Web服务器进行访问/刷新令牌进行交换。主要区别在于有两个GoogleAuthorizationCodeFlow(它们代表本机和服务器部件):
- 使用本机应用程序的ID和秘密,用于生成授权代码。
- 一个使用Web应用程序ID和秘密的人,用于将授权代码交换为凭据。
但是,此类过程确实导致401个未经授权的例外。
使用两个GoogleAuthorizationCodeFlous Codeflys Coldentials(本机应用程序的信用或Web应用程序的信用)时,该过程成功并返回刷新令牌。
如何使用Web应用程序上的本机应用程序中的授权代码来生成访问令牌?是否有一种方法可以使用Web应用程序ID和秘密来交换授权代码,或者必须使用与生成令牌的相同凭据?
它不起作用的原因是身份验证链接到客户端ID和客户端秘密。
当用户身份验证时,他们正在对该客户端ID/客户端秘密对进行身份验证。您不能只使用刷新令牌或身份验证代码,然后将其与其他客户ID和秘密一起使用,它们无法匹配,并且您将获得401 Unauthorized exception
。
我如何使用本机应用程序的授权代码 Web应用程序生成访问令牌?
您需要做的就是创建Client ID for native application
仅一个,然后在本机应用程序和Web应用程序中使用客户ID和客户端秘密。
Web vs Native
Client ID for native application
和Client ID for web application
之间的唯一真正区别是重定向URI。重定向的URI只是告诉身份验证服务器将身份验证返回到哪里。对于一个简单的网站,您的网页大部分时间都可以处理代码,这是相同的IP地址。在本机应用程序的情况下,无法知道这一点,因此服务器将信息发送回请求IP。除此之外,实际上没有差异,除了Google喜欢知道其网站或运行代码的已安装应用程序。因此,您可以在Web应用程序上使用本机客户ID,服务器将其返回到所要求的地方。
安全
在Web应用程序上使用本机元素可能存在一些安全考虑,我想有人可以掌握它并使用您的客户端ID发送信息。TBH我发现了这个有限的机会。