Oauth 2.0 Google OAuth 2.0服务器端应用程序

Oauth 2.0 Google OAuth 2.0服务器端应用程序,oauth-2.0,Oauth 2.0,我正在尝试创建一个java应用程序,在cron作业中从shell脚本运行命令行。在这种情况下,我不会让在场的用户同意允许在浏览器中访问。此应用程序将查询目录,并将此目录中的视频上载到YouTube。我对YouTube api和Oauth2.0都是新手。在我所做的所有研究中,我看到了很多关于如何完成我想做的事情的相互矛盾的信息 这是我的密码。请让我知道你认为我哪里出了问题。提前谢谢 公共静态凭据授权(列表作用域、字符串credentialDatastore)引发IOException{ /

我正在尝试创建一个java应用程序,在cron作业中从shell脚本运行命令行。在这种情况下,我不会让在场的用户同意允许在浏览器中访问。此应用程序将查询目录,并将此目录中的视频上载到YouTube。我对YouTube api和Oauth2.0都是新手。在我所做的所有研究中,我看到了很多关于如何完成我想做的事情的相互矛盾的信息

这是我的密码。请让我知道你认为我哪里出了问题。提前谢谢

公共静态凭据授权(列表作用域、字符串credentialDatastore)引发IOException{

    // Load client secrets.
    //Reader clientSecretReader = new InputStreamReader(Auth.class.getResourceAsStream("/main/resources/client_secrets.json"));
    Reader clientSecretReader = new InputStreamReader(Auth.class.getResourceAsStream("/main/resources/client_secret_file.apps.googleusercontent.com.json"));
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, clientSecretReader);

    // Checks that the defaults have been replaced (Default = "Enter X here").
    if (clientSecrets.getDetails().getClientId().startsWith("Enter")
            || clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) {
        System.out.println(
                "Enter Client ID and Secret from https://console.developers.google.com/project/_/apiui/credential "
                        + "into src/main/resources/client_secrets.json");
        System.exit(1);
    }

    // This creates the credentials datastore at ~/.oauth-credentials/${credentialDatastore}
    // THIS IS WHERE I NEED TO CHANGE, TO WORK WITH THIS APP!!!!
   // FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File(System.getProperty("user.home") + "/" + CREDENTIALS_DIRECTORY));
    FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File("." + "/" + CREDENTIALS_DIRECTORY));
    DataStore<StoredCredential> datastore = fileDataStoreFactory.getDataStore(credentialDatastore);

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes).setCredentialDataStore(datastore).setAccessType("offline")
            .build();

    // Build the local server and bind it to port 8080
   // LocalServerReceiver localReceiver = new LocalServerReceiver.Builder().setPort(8080).build();
    LocalServerReceiver localReceiver = new LocalServerReceiver.Builder().setPort(8080).build();

    // Authorize.
    try {
        Credential returnCreds = new AuthorizationCodeInstalledApp(flow, localReceiver).authorize("xxxxxxxxxxxxxxxxxxx"); 
        returnCreds.refreshToken();

        return returnCreds;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // if not authorized, will return a null credential
    return null;
}
//加载客户端机密。
//Reader-clientSecretReader=新的InputStreamReader(Auth.class.getResourceAsStream(“/main/resources/client_secrets.json”);
Reader-clientSecretReader=new-InputStreamReader(Auth.class.getResourceAsStream(“/main/resources/client\u secret\u file.apps.googleusercontent.com.json”);
GoogleClientSecrets clientSecrets=GoogleClientSecrets.load(JSON_工厂,clientSecretReader);
//检查默认值是否已被替换(Default=“在此处输入X”)。
if(clientSecrets.getDetails().getClientId().startsWith(“输入”)
||clientSecrets.getDetails().getClientSecret().startsWith(“输入”)){
System.out.println(
“从中输入客户端ID和密码https://console.developers.google.com/project/_/apiui/credential "
+“输入src/main/resources/client_secrets.json”);
系统出口(1);
}
//这将在~/.oauth credentials/${credentialDatastore}处创建凭据数据存储
//这就是我需要改变的地方,使用这个应用!!!!
//FileDataStoreFactory FileDataStoreFactory=newfiledatastorefactory(新文件(System.getProperty(“user.home”)+“/”+CREDENTIALS_目录));
FileDataStoreFactory FileDataStoreFactory=newfiledatastorefactory(新文件(“.“+”/“+CREDENTIALS_目录));
DataStore DataStore=fileDataStoreFactory.getDataStore(credentialDatastore);
GoogleAuthorizationCodeFlow=新建GoogleAuthorizationCodeFlow.Builder(
HTTP_传输、JSON_工厂、clientSecrets、scopes).setCredentialDataStore(数据存储).setAccessType(“脱机”)
.build();
//构建本地服务器并将其绑定到端口8080
//LocalServerReceiver localReceiver=新的LocalServerReceiver.Builder().setPort(8080.build();
LocalServerReceiver localReceiver=新的LocalServerReceiver.Builder().setPort(8080.build();
//授权。
试一试{
Credential returnCreds=新授权代码InstalledApp(流程,本地接收器)。授权(“XXXXXXXXXXXXXXXX”);
returnCreds.refreshToken();
回归信条;
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//如果未授权,将返回空凭证
返回null;
}

这篇文章似乎包含了我的许多问题:


仍然没有完成这个实现,但它看起来确实是一个很好的线索

我意识到,如果事情最终如我所愿,我将不会使用localReceiver来生成浏览器。。我能做我想做的吗。我总是使用同一个youTube帐户,因为我只发布我们的视频。