Как войти в систему, используя SSO oauth 2.0, а затем сохранить токен для запуска всех других API из скрипта автоматизации почтальона? - PullRequest
0 голосов
/ 08 января 2020

Я не могу автоматизировать скрипт почтальона для этой процедуры:

  1. Откройте почтальон, затем на вкладке авторизации выберите тип-> OAuth 2.0, Добавить данные авторизации-> Запросить заголовки и токен доступа. -> Получить токен доступа. Заполненные поля: имя токена, тип предоставления -> код авторизации, URL-адрес обратного вызова, URL-адрес авторизации, URL-адрес токена доступа, идентификатор клиента, область действия, состояние, аутентификация клиента-> Отправить как базовый c заголовок аутентификации, а затем запрос Для токена открывается всплывающее окно для единого входа введите описание изображения здесь

  2. Затем появится всплывающее окно «Управление доступными токенами», затем нажмите кнопку «Использовать токен» внизу, затем запустите api URL, который теперь содержит токен во вкладке Заголовок-> временные заголовки. Как автоматизировать эту процедуру с сохранением токена в переменных среды и последующим запуском с ним остальных API.

1 Ответ

0 голосов
/ 18 февраля 2020

Я пытался получить доступ к access_token из oauth 2.0, используя Express и puppeteer.

var express = require('express');
const puppeteer = require('puppeteer');
var app = express();
app.get('/', function(req, res) {
    run().then(() => console.log('Done')).catch(error => console.log(error));
    async function run(){
        const browser = await puppeteer.launch({headless: false});
        const page = await browser.newPage();
        await page.goto('https://abcd.com/authorize? 
audience=https://abcd.com&scope=openid%20email%20profile&client_id=abcd&response_type=token&redirect_uri=https://abcd.com/callback');
await new Promise(resolve => setTimeout(resolve, 5000));
    await page.focus('#email');
    await page.keyboard.type('abcd@gmail.com');
    await page.focus('#password');
    await page.keyboard.type('efghi');
    const waitForLoad = new Promise(resolve => page.on('load', () => resolve()));
    await page.evaluate(() => {
        document.querySelector('span[class="label"]').click();
    });
    await waitForLoad;
    console.log('Waiting to be redirected to the client.');
    const clientUrl = await page.evaluate(() => window.location.href);
        //1st the split is from when it encounters = in the url
    var split1 = clientUrl.split('=');
    //2nd split is when it encounters & in the 2nd object of the array
    var split2 = split1[1].split('&');
    //taking array in an object and conversing it to json
    var obj = {
      access_token: split2[0]
    }
    await browser.close();
    res.send(obj);
  };
});
app.listen(8000, function(){
    console.log('Heard on 8000');
});

Это можно запустить на почтальоне для запуска других API с полученным токеном доступа.

...