4

任何人都可以帮助我们通过java代码运行URL:

我们正在尝试将文件从本地驱动器上传到 Gmail 驱动器。

遵循的步骤

  1. 在 Google Developer(API) 的帮助下生成 URL

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
         httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
         .setAccessType("online")
         .setApprovalPrompt("auto").build();
    
    String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
    
  2. 得到以下网址

    https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&client_id=1066028402320.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/drive

  3. 在 Internet 浏览器中运行 URL

  4. 用户 ID 和密码作为 Internet 浏览器中的输入,以获取唯一的响应令牌

现在作为我们开发的一部分,我们已经完成了第 2 步,并希望使用 Java 代码自动执行第 3 步和第 4 步。(生成与我们的 UserdId 和密码一起提供的 URL 后,我们应该得到作为唯一令牌的响应。)

期待您的帮助

4

1 回答 1

2

我会使用以下场景

  1. 设置本地网络服务器以从用户的 oauth 重定向中检索代码
  2. 将流的redirect_uri设置为本地网络服务器并获取auth url
  3. 为用户打开 auth url 的浏览器
  4. 从本地网络服务器检索代码并交换 oauth 代码

以下是代码的更多详细信息。

设置本地网络服务器以检索 HTTP 请求

这是使用NanoHttpd设置本地网络服务器的示例

public class OAuthServer extends NanoHTTPD {
    /**
     * Constructs an HTTP server on given port.
     */
    public DebugServer() {
        super(8080);
    }

    @Override
    public Response serve(String uri, Method method, Map<String, String> header, Map<String, String> parms, Map<String, String> files) {
        bool error = false
        string code = null
        // User rejected approval
        if (parm.containsKey("error")) {
            error = true
        }
        // Here we get the code!
        if (parm.containsKey("code")) {
            code = parm.get("code")
        }
        StringBuilder sb = new StringBuilder();
        sb.append("<html>");
        sb.append("<head><title>Authorization</title></head>");
        sb.append("<body>");
        if (error) {
            sb.append("<h1>User rejected</h1>");
        }
        if (code==null) {
            sb.append("<h1>Unknown Error</h1>");
        }
        else {
            sb.append("<h1>Success</h1>");
        }
        sb.append("</body>");
        sb.append("</html>");
        return new Response(sb.toString());
    }

    public static void main(String[] args) {
        ServerRunner.run(OAuthServer.class);
    }
}

将流的redirect_uri设置为本地网络服务器并获取auth url

String url = flow.newAuthorizationUrl().setRedirectUri("http://localhost:8080").build();

为用户打开 auth url 的浏览器

// open the default web browser for the HTML page
Desktop.getDesktop().browse(url);

从本地网络服务器检索代码并交换 oauth 代码

现在,用户将通过 Web 浏览器批准 OAuth,并将代码发送到我们刚刚启动的本地 Web 服务器。现在我们已经从本地网络服务器检索到代码,我们可以将其解析为 int 并使用它进行身份验证和授权!

希望这可以帮助

于 2013-06-05T16:37:25.887 回答