当前位置: 首页 > 面试题库 >

来自Google API的存储凭据可使用Java重复使用

李建中
2023-03-14
问题内容

我已经成功授权了我的桌面应用程序。它存储一个名为的文件StoredCredential。为了不必在每次运行应用程序时都将URL复制到浏览器,接受等步骤,我想使用已经存储的凭据。

到目前为止,我的代码:

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
    httpTransport,
    JSON_FACTORY,
    CLIENT_ID,
    CLIENT_SECRET,
    SCOPE)
    .setDataStoreFactory(dataStoreFactory)
    .setApprovalPrompt("auto").setAccessType("offline").build();
//
System.out.println("flow success");

String url = flow
    .newAuthorizationUrl()
    .setRedirectUri(REDIRECT_URI) 
    .build();

System.out.println("Please open the following URL in your browser then "
    + "type the authorization code:");

System.out.println("  " + url);

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String code = br.readLine();

GoogleTokenResponse tokenResponse
    = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();

GoogleCredential credential = new GoogleCredential
    .Builder()
    .setTransport(new NetHttpTransport())
    .setJsonFactory(new JacksonFactory())
    .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
    .addRefreshListener(new CredentialRefreshListener() {
            @Override
            public void onTokenResponse(
                Credential credential,
                TokenResponse tokenResponse) throws IOException {

                System.out.println("Token Refreshed Succesfully");
            }

            @Override
            public void onTokenErrorResponse(
                Credential credential,
                TokenErrorResponse tokenErrorResponse) throws IOException {

                System.out.println("ERROR WITH TOKEN WTF?");
                }})
     .build();

如何读取存储的凭证并绕过命令行提示符?

我在想类似的东西:

if (stored cred exists) { 
    try  {
        // use 
    } catch  {
        // prompt the user
    }
}

问题答案:

您可以像这样从存储的凭据创建GoogleCredential对象:

GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(new NetHttpTransport())
        .setJsonFactory(new JacksonFactory())
        .setClientSecrets("client_id", "client_secret")
        .build();

credential.setAccessToken("access_token");


 类似资料:
  • 我正在开发一个聊天应用程序,在该应用程序中,我必须从edittext设置登录Id密码凭据,根据响应,我必须进入更多屏幕。 当我静态使用凭据时,我从网络服务获得响应 但当我从EditText获取凭证时,它现在给了我适当的回应。

  • 我有一个使用Firebase身份验证的node.js客户端。现在我想访问谷歌云存储,但是node.js的Firebase SDK不包括GCS。使用@google-云/存储工作,但只有匿名访问。如何将Firebase凭据应用到@google-Cloud/存储,以便在登录用户的上下文中访问GCS?

  • 假设我有一个数组[10][10][10][10][10]。由于一种方法,我让程序用随机数填充它们。现在我想“保存”那些值以备以后使用。我今天关闭了电脑,明天继续。我要怎么做?我不知道那个案子的密码。由于我必须与选定的启动解决方案工作几个月,我不能简单地让我的PC运行不停。 感谢任何帮助,谢谢:) 编辑:我现在有一些代码,但我得到一个错误:“outputfile不能被解决”我无法修复它到目前为止。但

  • 我的用户名和密码存储在Git扩展内部的某个地方。过了一段时间,需要再给用户名和密码,我给错了很多次。 现在,如果我想拉一些东西等,我会收到。我不能给新的密码,它似乎是存储的,我不知道如何改变它。 是否可以删除旧凭据? 我有2.51.04版本。我已经卸载了它,重新安装,它没有帮助我。

  • 我需要从hadoop集群连接到sftp服务器。我想知道是否有办法从存储在HDFS中的私钥加载标识。实际上,JSch对象似乎只接受本地路径: 你知道吗?

  • 我有一个JSF表,它使用Hashmap存储选定的复选框。我的问题是:是否可以使用2D Java数组而不是Hashmap来存储密钥? 编辑我使用此代码来存储选定的键。如何为重写此代码? 我的想法是创建2D数组(它将用于映射),它将存储页面数和页面上的列表。例如,100页x 10键。 编辑2 我使用延迟加载创建了JSF表,该表从Oracle获取数据。JSF工作得既好又快。我面临的问题是,当我试图创建“