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

Работа с базовым перенаправлением Node OAuth следующим образом

Еще смущает один момент с node.

У меня есть сервер, работающий по адресу http://localhost:3030, чтобы прослушивать попадание от перенаправления, но перенаправление никогда не приходит.

Как в Node запрос фактически следует за перенаправлениями. И в конечном итоге http://localhost:3030/?code=ccf3d214669645f594b59be14032e20d

Ссылка здесь; В браузере он оказывается в нужном месте
https://www.instagram.com/oauth/authorize/?client_id=8901edf0746b460489427434ba5d321e&redirect_uri=http://localhost:3030&response_type=code

30.11.2015

  • Пожалуйста, добавьте соответствующий код, на который невозможно ответить, не посмотрев на него. Что такое основной/корневой маршрут? 30.11.2015
  • @Michelem, маршруты не важны, я могу сделать их такими, какими они должны быть. 02.12.2015

Ответы:


1

Для потока authorization_code требуется браузер, поскольку пользователь должен быть перенаправлен на сторонний веб-сайт для входа и аутентификации вашего приложения, в данном случае это веб-сайт Instagram. Так что вам нужен браузер, чтобы перенаправить вас обратно на ваш redirect_url с параметром code.

Для этого типа потока OAuth вы можете использовать Grant. Вам не нужно реализовывать поток OAuth самостоятельно. Просто следуйте базовому примеру и замените facebook на instagram. Как видите, у вас есть базовый веб-сервер, и вам нужно перейти к маршруту /connect/instagram в веб-браузере. Единственная разница в том, что Грант возьмет на себя тяжелую работу за вас, поэтому в конце вы получите только access_token.

Вы можете протестировать работу Instagram здесь.

30.11.2015
  • То есть нет возможности подключиться к API инстаграма без браузера? Это звучит неправильно. 01.12.2015
  • Есть два других менее безопасных потока OAuth, таких как Учетные данные пароля владельца ресурса и Учетные данные клиента, для которых не требуется браузер, но Instagram, похоже, не поддержите их. 01.12.2015
  • Итак, как насчет использования драйвера браузера, такого как Protractor, для фактического посещения его для вас и т. Д. Это будет 100% серверная сторона. Просто кажется нелепым требовать внешнего интерфейса в процессе полной внутренней аутентификации, в котором нет стороннего пользователя. Нужно ли авторизоваться в интерфейсе? 01.12.2015
  • Я так понимаю, поток Client Credentials предназначен именно для предоставления доступа к самому приложению. Автоматизация процесса браузера может быть возможна с помощью node-webkit — вам нужно будет заполнить имя пользователя и пароль, а затем предоставить доступ к вашему приложению. 01.12.2015
  • Это моя точка зрения, что нет пользователя, потому что он не предоставляет услугу другим, это просто учетная запись, учетная запись разработчика и служба. 02.12.2015

  • 2

    Мой первый ответ и комментарии остаются в силе, но я собираюсь показать вам, как вы можете автоматизировать процесс авторизации с помощью nwjs.

    Сначала вам нужно включить неявный поток для вашего приложения OAuth — на вкладке «Безопасность».

    В этой демонстрации я использую http://localhost:3000/callback в качестве URI перенаправления для моего приложения OAuth. Поэтому вам нужно добавить его в качестве дополнительного URL-адреса перенаправления вашего приложения OAuth. Также заполните все необходимые учетные данные в authorization.html.

    сервер.js

    var fs = require('fs')
    var path = require('path')
    var http = require('http')
    var url = require('url')
    var qs = require('querystring')
    var child = require('child_process')
    
    var nw = null
    var server = http.createServer()
    
    server.on('request', function (req, res) {
      if (req.url == '/connect') {
        var dpath = path.resolve(__dirname)
        nw = child.spawn('nw', [dpath])
        res.end()
      }
      else if (req.url == '/callback') {
        var fpath = path.resolve(__dirname, 'token.html')
        var body = fs.readFileSync(fpath, 'utf8')
        res.writeHead(200, {'content-type': 'text/html'})
        res.end(body)
      }
      else if (/^\/token/.test(req.url)) {
        var uri = url.parse(req.url)
        var query = qs.parse(uri.query)
        console.log(query)
        nw.on('close', function (code, signal) {
          console.log('NW closed')
        })
        nw.kill('SIGHUP')
        res.end()
      }
    })
    
    server.listen(3000, function () {
      console.log('HTTP server listening on port ' + 3000)
    })
    

    Начните с:

    node server.js
    

    Затем перейдите к http://localhost:3000/connect, пока вы можете использовать свой браузер.

    авторизация.html

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
      <title>Client Side Implicit OAuth Flow</title>
      <script type="text/javascript" charset="utf-8">
        var config = {
          client_id: '[CLIENT_ID]',
          redirect_uri: '[REDIRECT_URL]',
          username: '[USERNAME]',
          password: '[PASSWORD]'
        }
    
        var authorize_url = 'https://www.instagram.com/oauth/authorize/?' +
          'client_id=' + config.client_id + '&' +
          'redirect_uri=' + config.redirect_uri + '&' +
          'response_type=token'
    
        document.addEventListener('DOMContentLoaded', function (e) {
          var iframe = document.querySelector('iframe')
          iframe.setAttribute('src', authorize_url)
          iframe.onload = function (e) {
            var doc = this.contentWindow.document
            // login
            if (doc.querySelector('[name=username]')) {
              doc.querySelector('[name=username]').value = config.username
              doc.querySelector('[name=password]').value = config.password
              doc.querySelector('[type=submit]').click()
            }
            // authorize
            else if (doc.querySelector('[value=Authorize]')) {
              doc.querySelector('[value=Authorize]').click()
            }
          }
        }, false)
      </script>
    </head>
    <body>
      <iframe src=""></iframe>
    </body>
    </html>
    

    Как только вы нажмете этот маршрут, будет создан новый процесс, и authorize.html будет выполнено. Просто имейте в виду, что NWjs требует, чтобы на вашем сервере были установлены некоторые графические библиотеки, так что это не совсем безголовый браузер.

    Там браузер переходит к URL-адресу авторизации внутри iframe. В зависимости от того, вошли ли вы в систему или уже авторизовались, загружаются разные страницы приложения. Этот код просто заполняет ваше имя пользователя и пароль и нажимает на несколько ссылок.

    После завершения потока OAuth вы получите хэш access_token as в URL-адресе. Как вы, возможно, знаете, браузер не отправляет эту часть URL-адреса на сервер, поэтому в маршруте /callback сервер возвращает другую страницу с именем token.html, единственная цель которой — извлечь токен доступа из хэша URL-адреса и вернуть его в виде строки запроса. на маршруте /token.

    токен.html

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
      <title>Client Side Implicit OAuth Flow</title>
      <script type="text/javascript" charset="utf-8">
        var config = {
          callback_uri: 'http://localhost:3000/token'
        }
    
        var access_token = window.location.hash.replace('#access_token=', '')
        var url = config.callback_uri + '?access_token=' + access_token
    
        window.location.href = url
      </script>
    </head>
    <body>
    </body>
    </html>
    

    После запуска этого примера вы увидите свой токен доступа в командной строке:

    $ node server.js 
    HTTP server listening on port 3000
    { access_token: '1404767371.e5610d0.3381e9a2fd7340d8b90b729f407949d2' }
    NW closed
    

    Вы можете скачать все файлы с здесь.

    05.12.2015
  • @ kirk-strobeck Думаю, было бы интересно также реализовать явный поток OAuth на стороне сервера, используя те же инструменты, что и описанные выше. Вы можете увидеть это здесь. Я использую Grant, чтобы помочь мне с потоком OAuth, но это совершенно необязательно. Как видите, единственная разница в этом потоке заключается в том, что учетные данные приложения OAuth хранятся на сервере, а access_token возвращается в строке запроса по умолчанию. Также есть еще один шаг в потоке, но он скрыт при использовании Grant. 06.12.2015
  • У меня еще не было времени попробовать это, но я рад интегрировать это в статическую сборку на стороне сервера. СПАСИБО! 11.12.2015
  • Новые материалы

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

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

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

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

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

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

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