Сохранение учетных данных oAuth - PullRequest
0 голосов
/ 13 июня 2018

Я использую код из Документов Google для управления календарем Google следующим образом.

public class CalendarQuickstart {
    private static final String APPLICATION_NAME = "Google Calendar API Java Quickstart";
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    private static final String CREDENTIALS_FOLDER = "credentials"; // Directory to store user credentials.

    /**
     * Global instance of the scopes required by this quickstart.
     * If modifying these scopes, delete your previously saved credentials/ folder.
     */
    private static final List<String> SCOPES = Collections.singletonList(CalendarScopes.CALENDAR_READONLY);
    private static final String CLIENT_SECRET_DIR = "client_secret.json";

    /**
     * Creates an authorized Credential object.
     * @param HTTP_TRANSPORT The network HTTP Transport.
     * @return An authorized Credential object.
     * @throws IOException If there is no client_secret.
     */
    private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
        // Load client secrets.
        InputStream in = CalendarQuickstart.class.getResourceAsStream(CLIENT_SECRET_DIR);
        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 java.io.File(CREDENTIALS_FOLDER)))
                .setAccessType("offline")
                .build();
        return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
    }

    public static void main(String... args) throws IOException, GeneralSecurityException {
        // 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();

        // List the next 10 events from the primary calendar.
        DateTime now = new DateTime(System.currentTimeMillis());
        Events events = service.events().list("primary")
                .setMaxResults(10)
                .setTimeMin(now)
                .setOrderBy("startTime")
                .setSingleEvents(true)
                .execute();
        List<Event> items = events.getItems();
        if (items.isEmpty()) {
            System.out.println("No upcoming events found.");
        } else {
            System.out.println("Upcoming events");
            for (Event event : items) {
                DateTime start = event.getStart().getDateTime();
                if (start == null) {
                    start = event.getStart().getDate();
                }
                System.out.printf("%s (%s)\n", event.getSummary(), start);
            }
        }
    }
}

Я взял это и поместил в приложение Java на Google App Engine.Однако приложение не может записать учетные данные в каталог credentials, поскольку App Engine не разрешает запись на диск.

Один из способов преодолеть это - написать пользовательскую реализацию FileDataStoreFactory и сохранить учетные данные в Google Bucket.Это рекомендуемый appoarch?Насколько это безопасно?Есть ли лучшая альтернатива?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете перейти на этот сайт со ссылкой на , как работать с OAuth 2.0 с клиентской библиотекой App Engine для Java .Это было бы эквивалентно решению @ noogui, использующему Java.

Здесь указано, что служебный класс GoogleCredential используется для авторизации OAuth 2.0 с помощью сервисов Google:

API Google поддерживают потоки OAuth 2.0 для различных типов клиентских приложений.Во всех этих потоках клиентское приложение запрашивает токен доступа, связанный только с вашим клиентским приложением и владельцем защищенных данных, к которым осуществляется доступ.Маркер доступа также связан с ограниченной областью, которая определяет тип данных, к которым имеет доступ ваше клиентское приложение (например, «Управление вашими задачами»).Важной целью OAuth 2.0 является обеспечение безопасного и удобного доступа к защищенным данным при минимизации потенциального воздействия в случае кражи токена доступа.

Существует поток кода авторизации это необходимо для того, чтобы конечные пользователи могли предоставлять доступ к защищенным данным своим приложениям.Это будет справедливо как для приложений веб-сервера, так и для приложений из App Engine.

В него также включен пример настройки приложения для использования Календарь из App Engine .

0 голосов
/ 13 июня 2018

На странице, посвященной использованию Google App Engine , также упоминается, как подключиться к другим API Google, таким как Календарь Google, используя OAuth2Decorator или OAuth2DecoratorFromClientSecrets.

.Самый простой способ обработки OAuth 2.0 - использовать Python-декораторы App Engine, предоставляемые этой библиотекой.Эти декораторы обрабатывают все шаги OAuth 2.0 без необходимости использования каких-либо объектов Flow, Credentials или Storage.

На выбор предлагается два класса декораторов:

OAuth2Decorator : Используйте класс OAuth2Decorator для создания декоратора с вашим идентификатором клиента и секретом. OAuth2DecoratorFromClientSecrets : Используйте класс OAuth2DecoratorFromClientSecrets для создания декоратора с помощью файла client_secrets.json, описанного в разделе flow_from_clientsecrets () страницы OAuth 2.0.Есть также два типа декораторов на выбор:

oauth_required : Любой метод, украшенный oauth_required, завершает все шаги OAuth 2.0 перед входом в функцию.В теле функции вы можете использовать функцию http () декоратора, чтобы получить объект Http, который уже авторизован.oauth_aware: этот тип декоратора требует немного больше кода, чем oauth_required, но предпочтительнее, потому что он дает вам контроль над пользовательским интерфейсом.Например, вы можете отобразить страницу, объясняющую, почему пользователь перенаправляется на сервер авторизации.Этот декоратор не выполняет никаких шагов OAuth 2.0, но в теле декорированной функции вы можете вызвать следующие удобные функции декоратора: has_credentials (): Возвращает True, если существуют действительные учетные данные для доступа вошедшего в систему пользователя.authorize_url (): возвращает первый URL, который запускает шаги OAuth 2.0.

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