java DropBox SDK 使用重定向生成令牌

ert*_*ert 6 java token dropbox

在阅读了官方 Dropbox 文档后,我设法编写了此代码以使用 DropBox 对用户进行身份验证并获取他的访问令牌。用户必须复制和粘贴令牌,我不喜欢这一步,我注意到一些开发人员可以使用类的withRedirect()方法DbxWebAuth。有一个使用重定向的示例,但它适用于 Web 应用程序,我无法将其调整为我的桌面应用程序。你们中有人与此有关吗?这是目前我的代码

 public static void main(String[] args) throws Exception {

    String accessToken = "";
    String userLocale = null;
    DbxRequestConfig requestConfig = new DbxRequestConfig("text-edit/0.1", userLocale);
    DbxAppInfo appInfo = new DbxAppInfo("myString", "myString");
    DbxWebAuth auth = new DbxWebAuth(requestConfig, appInfo);
    DbxWebAuth.Request requestAuth = DbxWebAuth.newRequestBuilder().withNoRedirect().build();
    String authorizeUrl = auth.authorize(requestAuth);

    System.out.println("1. Go to " + authorizeUrl);
    System.out.println("2. Click \"Allow\" (you might have to log in first).");
    System.out.println("3. Copy the authorization code.");

    //Abrimos el enlace de autenticación del paciente en la carpeta de DropBox
    try {
        URL authenticationURL = new URL(authorizeUrl);
        Desktop.getDesktop().browse(authenticationURL.toURI());

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    JFrame frame1 = new JFrame("InputDialog Example #2");
    frame1.setAlwaysOnTop(true);

    String code = JOptionPane.showInputDialog(frame1, "Insert verification code");

    System.out.println(code);
    code = code.trim();

    try {
        DbxAuthFinish authFinish = auth.finishFromCode(code);

        accessToken = authFinish.getAccessToken();

    } catch (Exception e) {

    }
}
Run Code Online (Sandbox Code Playgroud)

The*_*unk 3

我很懒,没有在这里编写任何代码,而是在回调方案中,您向身份验证服务器提供重定向 URL,该 URL 由您的系统浏览器通过 301 重定向加载,这意味着 Dropbox 服务器实际上不需要为了到达您的回调 URL,他们所做的只是重定向您的客户端。很多时候,人们在测试 Web 应用程序时使用 localhost 作为回调 URL。

这意味着您实际上不需要运行 Web 服务器来接收回调 URL 中传递的参数(即您的访问令牌),因为您已经拥有在来自服务器的 301 响应。尽管有一些小型 Web 服务器(例如 nanohttpd)很容易嵌入到您的代码中,以防这一切听起来有点太复杂。

在代码中嵌入 Web 服务器来侦听回调的替代方法:

方法1:在像您这样的情况下,如果您不想设置Web服务器来侦听端口,那么您的本机应用程序只需要声明一些URL空间,以便系统不会在本机中加载它浏览器而是将 URL 传递到您的本机应用程序。如果这将是一个 Windows 应用程序,您可以注册一个自定义协议,以便拦截使用您的应用程序向该端点发出的请求。您也可以使用 iOS 和 Android 执行此操作。

方法 2:我的选择另一种方法是使用 Unirest 或 httpclient 等客户端与 Dropbox 身份验证服务器进行初始联系,而不是像上面的 try 块中那样使用桌面浏览器。这将允许您从 Dropbox 服务器获取响应并解析它。但是,如果您绝对需要访问 Dropbox 网页让用户输入其凭据(即您无法确定如何通过 httpclient 传递凭据),那么您可能会陷入使用系统浏览器和方法 1 的困境。

下面是使用 httpclient 发出请求的示例,选择不遵循 301/302 重定向,然后从返回的标头中解析重定向位置(带有访问令牌的 URL)。