В настоящее время у меня настроен проект приложения для разработчиков SurveyMonkey, и я внедряю OAuth, как описано в их документации. Я выполнил Шаг 1 (Прямой переход пользователя на страницу авторизации OAuth SurveyMonkey), но как только пользователь введет свое имя пользователя и пароль для авторизации доступа к SurveyMonkey, как указано в шаге 2 по приведенной выше ссылке, как мне получить доступ к включенному недолговечному коду как параметр запроса? По сути, после того как мы покинули веб-сайт, который я создаю, как мне получить доступ к параметрам URL-адреса со страницы SurveyMonkey, которую просматривает пользователь, но мой сайт, насколько я могу судить, не имеет прямого доступа?
Внедрение OAuth для SurveyMonkey, шаг 2
Ответы (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();
});
Обратите внимание: если вы просто хотите получить доступ к своей учетной записи, если вы прокрутите вниз в нижней части страницы настроек вашего приложения в разделе «Учетные данные», то для вашей учетной записи уже есть токен доступа.
Также обратите внимание, что приложения в режиме «Черновик» в любом случае имеют доступ только к вашей учетной записи.