Сохраненные учетные данные из Google API для повторного использования с использованием Java

Я успешно авторизовал свое настольное приложение. Он хранит файл с именем 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
    }
}

person Killerpixler    schedule 08.11.2013    source источник
comment
По сути, есть ли способ сказать учетные данные GoogleCredential = new GoogleCredential.Builder().getThingFromFile   -  person Killerpixler    schedule 08.11.2013
comment
Я разместил здесь ответ stackoverflow.com/a/42517728/266531, который, я думаю, более подробно описывает то, что вам нужно.   -  person Kirby    schedule 28.02.2017


Ответы (2)


Вы можете создать объект GoogleCredential из сохраненных учетных данных следующим образом:

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

credential.setAccessToken("access_token");
person Jhanvi    schedule 12.11.2013
comment
Как он узнает, откуда загрузить токен обновления или StroredCredential? - person adu; 12.06.2018

person    schedule
comment
Вы можете добавить некоторые пояснения к этому ответу - person codingEnthusiast; 26.02.2015