Внедрение OAuth для SurveyMonkey, шаг 2

В настоящее время у меня настроен проект приложения для разработчиков SurveyMonkey, и я внедряю OAuth, как описано в их документации. Я выполнил Шаг 1 (Прямой переход пользователя на страницу авторизации OAuth SurveyMonkey), но как только пользователь введет свое имя пользователя и пароль для авторизации доступа к SurveyMonkey, как указано в шаге 2 по приведенной выше ссылке, как мне получить доступ к включенному недолговечному коду как параметр запроса? По сути, после того как мы покинули веб-сайт, который я создаю, как мне получить доступ к параметрам URL-адреса со страницы SurveyMonkey, которую просматривает пользователь, но мой сайт, насколько я могу судить, не имеет прямого доступа?


person Adam Freymiller    schedule 18.06.2016    source источник


Ответы (1)


Недолговечный код включается в качестве параметра запроса в ваш redirect_uri. На странице настроек вашего приложения вы установите параметр с меткой «URL-адрес перенаправления OAuth», чтобы он был ссылкой на ваш сервер.

Допустим, ваш сайт https://www.example.com, ваш URI перенаправления может быть чем-то вроде https://www.example.com/surveymonkey/oauth, и вы должны сохранить его в настройках своего приложения.

Итак, для шага 1 вы должны отправить пользователя на:

https://api.surveymonkey.net/oauth/authorize?response_type=code&redirect_uri=https://www.example.com/surveymonkey/oauth&client_id=<your_client_id>&api_key=<your_api_key>

Когда пользователь нажимает «Авторизоваться» в форме OAuth, мы отправим недолговечный код на ваш redirect_uri в качестве параметра запроса. Таким образом, пользователь будет отправлен на:

https://www.example.com/surveymonkey/oauth?code=<short_lived_code>

Обычно вы не будете отображать страницу (хотя вы можете, а затем проверить код в JavaScript через window.location.search или что-то еще), но вместо этого на стороне сервера вашего хоста вы получите код из параметра GET (в зависимости от вашего языка/фреймворка) и обменять этот недолговечный токен на долгоживущий токен доступа по адресу https://api.surveymonkey.net/oauth/token?api_key=<your_api_key>.

Пример питона:

import requests

def surveymonkey_oauth(request):
    code = request.GET['code']

    post_body = {
        "client_secret": "your_client_secret",
        "redirect_uri": "https://www.example.com/surveymonkey/oauth",
        "grant_type": "authorization_code",
        "code": code
    }

    headers = {
        "Content-Type": "application/x-www-form-urlencoded"
    }

    response = requests.post("https://api.surveymonkey.net/oauth/token?api_key=<your_api_key>", headers=headers, data=post_body)

    access_token = response['access_token']

Затем вы можете сохранить этот токен доступа и получить его для пользователя всякий раз, когда вы хотите сделать запрос к API SurveyMonkey для этого пользователя.

Я давно не использовал node.js, но позвольте мне попробовать пример узла для вас, так как я вижу, что у вас есть выражение как тег:

var http = require('http');
var querystring = require("querystring");

app.get('/surveymonkey/oauth', function (req, res) {
  var code = req.query.code;

  var post_body = querystring.stringify({
    "client_secret": "your_client_secret",
    "redirect_uri": "https://www.example.com/surveymonkey/oauth",
    "grant_type": "authorization_code",
    "code": code
  });

  var options = {
      host: 'api.surveymonkey.net',
      port: 443,
      path: '/oauth/token?api_key=<your_api_key>',
      method: 'POST',
      headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': Buffer.byteLength(post_body)
      }
  }

  var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (body) {
      // Get access_token from body and do what you like with it
    });
  });
  req.write(post_body);
  req.end();
});

Обратите внимание: если вы просто хотите получить доступ к своей учетной записи, если вы прокрутите вниз в нижней части страницы настроек вашего приложения в разделе «Учетные данные», то для вашей учетной записи уже есть токен доступа.

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

person General Kandalaft    schedule 18.06.2016
comment
Я максимально точно адаптировал ваш код и застрял, как описано в этом вопросе: stackoverflow.com/questions/38155717/ - person Adam Freymiller; 03.07.2016