Nano Hash - криптовалюты, майнинг, программирование

В JavaScript-клиенте Календаря Google отсутствует токен обновления

Я пытаюсь внедрить Календарь Google в наш веб-проект. После поиска и перепробования почти всех трюков в моей сумке я не смог получить токен обновления после того, как пользователь дал согласие на доступ к календарю. Я хочу получить доступ к календарю пользователя на своем внешнем интерфейсе (токен доступа и токен обновления) и предоставить ему бэкэнд (python) для последующего обновления токена доступа. Попробовав несколько доступных решений, я использую это - В html -

<script src="https://apis.google.com/js/client.js"></script>

В javascript при нажатии кнопки -

gapi.auth.authorize({
         client_id: xxx.apps.googleusercontent.com,
         client_secret: 'XYZ',
         scope: "https://www.googleapis.com/auth/calendar", 
         immediate: false,
         response_type: 'code token',
         access_type:'offline', 
         prompt:'consent'
}, handleAuthResult);

Из этого я могу получить следующий ответ -

    {
  "token_type": "Bearer",
  "access_token": "XXX",
  "scope": "email profile openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar",
  "login_hint": "XXX",
  "expires_in": "3559",
  "id_token": "XXX",
  "session_state": null,
  "expires_at": "1597689877",
  "code": "4/3XXXXX",
  "status": {
    "signed_in": true,
    "method": "PROMPT",
    "google_logged_in": true
  },
  "g-oauth-window": null,
  "client_id": "XXX.apps.googleusercontent.com",
  "cookie_policy": "single_host_origin",
  "response_type": "code token",
  "authuser": "2",
  "issued_at": "1597686278"
}

Но по-прежнему нет признаков токена обновления, я попытался обменять код для токена доступа и токена идентификатора с помощью этого API -

let request_params = JSON.stringify({
        code: '4/3XXXXX',
        client_id: 'XXX.apps.googleusercontent.com',
        client_secret: 'XXX',
        redirect_uri: 'http://localhost:5000',
        grant_type: 'authorization_code'
    });
    $.ajax({
        url: 'https://oauth2.googleapis.com/token',
        type: 'POST',
        data: request_params,
        headers: {
            'Content-type': 'application/x-www-form-urlencoded'
        },
        contentType: "application/x-www-form-urlencoded",
        success: (res) => {
            console.log(res, 'tokens')
        },
        error: (error) => {
            console.log('An error occurred', error)
        }
    });

Но это также дает недопустимую ошибку grant_type. Любая помощь приветствуется. Также, пожалуйста, дайте мне знать, если есть какая-либо альтернатива, где я могу напрямую перенаправить с помощью моего сервера, чтобы получить аутентификацию вместо javascript.


  • Авторизация на стороне клиента не возвращает токен обновления, что было бы кошмаром для безопасности. Используйте серверный язык. 17.08.2020
  • Да, это то, что я имел в виду раньше, и пытался сделать это с помощью python sdk для календаря Google, но в этом учетные данные получены путем запуска локального сервера, которого я избегаю, поскольку он поможет мне только на локальном хосте. Любые предложения о том, как это сделать без запуска локального сервера? 17.08.2020
  • Запросить доступ пользователя по истечении срока действия токена доступа будет вашим единственным вариантом, если вы не хотите запускать сервер. Как вы размещаете это, если у вас нет сервера для его размещения? 18.08.2020

Ответы:


1

Я смог понять это с помощью OAuth2WebServerFlow в python. Это был процесс, которому я следовал -

  1. Создайте экземпляр потока, например -

flow = OAuth2WebServerFlow(client_id='XXX', client_secret='XXX', scope='https://www.googleapis.com/auth/calendar', redirect_uri='your_redirect_url', access_type='offline', prompt='consent')

  1. Перенаправление на URL-адрес авторизации, полученный пользователем - auth_uri = flow.step1_get_authorize_url()

  2. После аутентификации пользователь перенаправляется на указанный вами redirect_url вместе с кодом в качестве параметра.

  3. Передайте этот код серверной части, чтобы получить токены доступа и обновления, используя - credentials = flow.step2_exchange(code). Здесь поток будет тем же экземпляром потока, сгенерированным с помощью шага 1, а учетные данные будут иметь токены.

Примечание. Google не предоставляет токены, и step2_exchange генерирует ошибку недопустимого предоставления, если вы уже создали действительный токен обновления и пытаетесь предоставить доступ еще раз.

19.08.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..