【问题标题】:Sharepoint authentication with Puppeteer and Node JS使用 Puppeteer 和 Node JS 进行 Sharepoint 身份验证
【发布时间】:2018-09-11 06:25:14
【问题描述】:

我无法找到验证用户身份的方法。 当您手动启动 Node JS 服务器时,它工作得很好(是的,它的代码很丑):

 if (data.URL.includes("https://share.url.com")) {
        await page.type('#userNameInput', 'user');
        await page.type('#passwordInput', 'pass');
        await page.click('#submitButton');

        await page.waitForNavigation({waitUntil: 'load'});
        await page.waitFor(6000);
    }

Sharepoint 不知道我的用户数据,因此他们将我导航到登录页面,我可以在其中填写登录信息,然后转到我请求的站点。但同时进行了 2 处更改: 1. 此登录页面不再存在,如果未找到登录信息,我只会链接到一个页面,其中显示“对不起,您无权访问此页面”。第二个问题或变化是节点服务器是由服务启动的。

最后,我只需要以某种方式访问​​该页面,然后对其进行截图。但是身份验证给我带来了麻烦。我现在需要解决这个问题,但我想不出其他解决方案。

Puppeteer 验证:

await page.authenticate({
    username: "user", 
    password: "pass"
});

这不起作用或将其与 auth 标头一起使用也不起作用。

保存用户信用。在浏览器中(铬(ium)):

我试图保存用户信誉。对于浏览器内的页面,但这没有任何影响。

网址验证:

我尝试在 (https://user:pass@share.url.com/bla/site.aspx) 之类的 URL 中进行身份验证,但它不起作用。

我不知道如何解决这个问题,你有什么建议我可以用其他方式尝试吗?或者你是否在我的代码或想法中看到了错误?

感谢比尔·盖茨

【问题讨论】:

  • 我想补充几点: 1. 我请求一个类似share.url.com/News/AllItems.aspx 的页面(网址已修改)。然后我被导航到另一个页面,因为我无法验证自己。现在我在一个有点像adfs.url.com/adfs/ls/… 的页面上。在 Firefox 的此页面上,会打开一个提示,要求我使用用户名和密码对我进行身份验证。手动登录后一切正常。

标签: node.js authentication sharepoint puppeteer


【解决方案1】:

关于

保存用户信用。在浏览器中(铬(ium)):

我有类似的情况 - 我想在登录时从 Facebook 截屏。为了实现它,我做了如下步骤:

1) 创建临时用户数据目录

mkdir /tmp/puppeteer_test

2) 使用这些参数运行 Chrome

/usr/bin/google-chrome --user-data-dir=/tmp/puppeteer_test --password-store=basic

3) 前往 facebook.com,登录然后关闭浏览器

4) 使用适当的参数运行 puppeteer:

const browser = await puppeteer.launch({
  headless: false,
  executablePath: '/usr/bin/google-chrome',
  args: ['--user-data-dir=/tmp/puppeteer_test']
});
const page = await browser.newPage();
await page.goto('https://facebook.com', { waitUntil: 'networkidle2' });
await page.screenshot({path: 'facebook.png'});
await browser.close();

【讨论】:

  • 你给我带来了正确的解决方案。我认为我的问题非常具体,但我不得不禁用 Chromium 中的 Cookie,并使用 Firefox 的用户代理字符串启动 Puppeteer => args:[“--user-agent='Mozilla/5.0'”]。在那之后,公司的单点登录不再起作用,但我被重定向到了我们的 Sharepoint 的登录页面(我通常启用 SSO 时无法访问)。现在我可以插入我的登录凭据。并访问 SharePoint。感谢您的回答! :)
【解决方案2】:

我正在关注 SharePoint

const browser = await puppeteer.launch();
const page = await browser.newPage();

await page.setViewport({width: 1920, height: 1080});

// Open SharePoint page
console.log("Opening page");
await page.goto('https://mytenant.sharepoint.com/sites/mysite');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("Page opened");

// Input username
console.log("Inputting username");
await page.type('#i0116', 'user@mytenant.com');
await page.click('#idSIButton9');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("Username input completed");

// Input password
console.log("Inputting password");
await page.type('#i0118', 'password123');
await page.click('#idSIButton9');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("Password input completed");

// Stay signed in
console.log("staying signed in");
await page.keyboard.press('Enter');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("staying signed in completed");

// Wait, because rendering is picky
await page.waitFor(6000);

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多