Создайте событие Календаря Google из Java Backend только из аутентифицированных пользователей OAuth - PullRequest
0 голосов
/ 26 февраля 2019

Работа над созданием события Календаря Google для определенного Календаря из серверной части.Как и когда кто-то генерирует собрание в веб-приложении, его следует добавить в общий календарь Google из бэкэнда (запущенного с использованием JAVA - Spring boot).

Пользователь, генерирующий событие, должен быть авторизованным пользователем, чтобы сделать это.

Я следовал этой документации для первоначальной настройки в Java.

Документы JAVA - начальная настройка

Зависимости, которые я использовал,

compile 'com.google.api-client:google-api-client:1.23.0'
compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
compile 'com.google.apis:google-api-services-calendar:v3-rev305-1.23.0'

Затем, чтобы создать событие, которое я пробовал, это,

public String createCalendarEvent() throws GeneralSecurityException, IOException {

    String calendarId = "primary";

    // Build a new authorized API client service.
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
        .setApplicationName(APPLICATION_NAME)
        .build();

    Event event = new Event()
        .setSummary("Testing Event Creation 1")
        .setLocation("India")
        .setDescription("Testing Event Creation");


    EventDateTime start = new EventDateTime()
        .setDate(new DateTime("2019-02-26"));
    event.setStart(start);

    EventDateTime end = new EventDateTime()
        .setDate(new DateTime("2019-02-28"));
    event.setEnd(end);

    event = service.events().insert(calendarId, event).execute();
    log.debug("Event is created and HTML link is: " + event.getHtmlLink());
    return event.getHtmlLink();
}

getCredential() метод заботится об авторизации, как показано ниже:

private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
    // Load client secrets.
    InputStream in = CalendarEventService.class.getClassLoader().getResourceAsStream(CREDENTIALS_FILE_PATH);
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
        .setDataStoreFactory(new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH)))
        .setAccessType("offline")
        .setApprovalPrompt("force")
        .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
    Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
    return credential;
}

Необходимые OAuth ClientID и ClientSecret расположены по адресу CREDENTIALS_FILE_PATH.Во время работы он генерирует AUTH_TOKEN внутри TOKENS_DIRECTORY_PATH и создает событие в календаре.

Теперь последующее выполнение выполняется без каких-либо проблем при изменении пользователя.

Мне требуется создать событие в календаре тем пользователем, который в данный момент вошел в систему (должен быть проверен на OAuth) и из бэкэнда как этот .

1 Ответ

0 голосов
/ 26 февраля 2019

обмен данными между серверами без согласия

Вы должны понимать, что личные данные пользователя всегда будут требовать от вас доступа.Вы не можете получить доступ к учетной записи пользователя без разрешения этого пользователя.Oauth2 дает нам как разработчикам способ запрашивать согласие пользователей на доступ к их данным.Невозможно обойтись без разрешения пользователя на доступ к его данным.

Теперь, если у вас есть учетная запись gsuite, вы можете использовать служебную учетную запись и настроить делегирование на весь домен, чтобы разрешить службу.доступ к учетной записи всем пользователям в домене, тогда он сможет выполнять действия от имени пользователей, не требуя никого запрашивать.

Если у вас есть доступ только к одной учетной записи, которую вы лично контролируете, тоВы также можете использовать учетную запись службы и предоставить доступ к календарю учетной записи службы, после чего учетная запись службы будет иметь доступ к этой учетной записи и сможет выполнять над ней действия.

Хранилище учетных данных

new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH)

обозначает место хранения учетных данных "user" - строка, обозначающая пользователя, для которого хранятся учетные данные.

...