我正在尝试将OAuth 2身份验证实现到我的Box(云存储服务)的Java代码中。 OAuth 2实施代码取自OAuth 2 essentials。
如您所知,oAuth有两个阶段。第一阶段要求客户端向this link发出http GET或POST请求,同时发送一些客户端凭据。所以我使用以下代码在我的java代码(Main.java)中打开带有上述url的浏览器:
if(Desktop.isDesktopSupported())
{
Desktop.getDesktop().browse(new URI(authorizationUrl.toString()));
}
在浏览器中,我可以看到客户端必须提供电子邮件和密码的网页,以授予对我的应用的访问权限。一切顺利,在授予访问权限后,浏览器被重定向到我提供的redirect_uri,这是我本地主机中的一个java servlet类(我不知道servlet对于这个过程是否真的是必要的但是我使用它)。
此redirect_uri现在从我提供的那个扩展,因为它具有服务器提供的代码和状态参数。 (注意:这部分场景发生在浏览器中,而调用浏览器的Main.java仍在运行并等待我必须提供的扩展redirect_uri)
那么如何将扩展的redirect_uri从浏览器(或servlet类)提供给Main.java类,该类在oauth进程的第一段调用了浏览器。
答案 0 :(得分:0)
而不是这样做是主应用程序
if(Desktop.isDesktopSupported()) {
Desktop.getDesktop().browse(new URI(authorizationUrl.toString()));
}
为什么不调用servlet来使用所需参数重定向到https://account.box.com/api/oauth2/authorize,然后发回代码和状态。
在servlet中编写处理OAuth的逻辑,并使用URLConnection从主应用程序中调用servlet。在OAuth完成后,将代码和状态从servlet返回给主应用程序。