我目前正在安装一个用java实现的桌面应用程序。我打算将谷歌日历API集成到应用程序中。
在授权过程中,我会进入这个阶段,此时我只能通过触发显示用户同意页面的浏览器来获取授权码。然后,用户必须单击“接受”,并将被重定向到显示授权码的网页。用户需要将此代码复制到EclipseSystem.in,以便授权过程继续(以交换令牌响应的授权码)。
我的问题是,如何简化这个过程,使用户不必为了接收授权码而进行这种愚蠢的复制和粘贴操作?(如果项目被编译成jar文件的话,这是行不通的...)目前我只知道我需要提供一个callbackurl或者其他什么东西,我就是想不出来。因此,我希望你能给我一个更具体的答案,而不是简单地告诉我概念。
先谢了。
4条答案
按热度按时间cld4siwp1#
你必须使用一个服务帐户(它带有一个私钥)来跳过涉及用户交互的步骤。有一个关于这个here的详细指南。
vecaoik12#
oauth2授权授予流(我认为这就是您正在做的)定义了应用程序通过HTTP重定向获取流。
事情是这样的:
1.您的应用程序打开一个套接字并在那里侦听HTTP请求
1.现在,它将打开浏览器并允许用户输入其凭据
1.用户单击submit并将凭据发送到oauth服务器
1.服务器检查凭据,如果正确,则将浏览器重定向到您的应用程序(重定向到您在1中打开的套接字)。
1.您的应用程序从浏览器获取授权代码,并将其与访问票证交换。
为了让服务器知道重定向到哪里,您在步骤2中使用了oauth参数redirect_uri。
unguejic3#
This page似乎表明auth代码在浏览器窗口的标题中,桌面应用程序应该从那里读取它。
rekjcdws4#
我找到了解决办法。这是java代码,但我打赌它在所有其他语言中的工作方式都是一样的。问题是我的服务器非常受限,所以我不能在那里启动任何一个浏览器(因为那只是一个没有UI的服务器),或者启动localhost服务器来获取代码。所有你需要的是自定义
VerificationCodeReceiver
:然后简单地按常规流程使用: