QWebEngineView не загружает SAML с помощью сообщения-реферера Content-Security-Policy - PullRequest
0 голосов
/ 17 января 2019

Я запускаю Qt 5.11 в Ubuntu Linux 17.04 и пытаюсь загрузить страницу аутентификации SAML с помощью QWebEngineView, который должен перенаправлять на страницу входа, но вместо этого приводит к странице ошибки и следующей ошибке:

js: нераспознанная директива Content-Security-Policy 'referrer'.

Я попытался перехватить URL-адрес и установить для HttpHeader 'Referer-Policy' значение 'no-referrer', прежде чем он отобразится в браузере с использованием QWebEngineUrlRequestInterceptor, но это приводит к той же проблеме.

Я создал образец теста и запустил его, чтобы воспроизвести проблему, которую я включил ниже. Я читаю в строке HTML из файла запроса SAML и устанавливаю его в QWebEngineView. Запрос SAML работает нормально для большинства сайтов, но этот конкретный сайт выдает ошибку "referrer", упомянутую выше.

Я использую PingIdentity в качестве IDP SAML SSO, но все, что он мне дает, это страница с ошибкой со ссылкой #. Как мне отладить это?

#include <QApplication>
#include <QCoreApplication>
#include <QGuiApplication>
#include <QWebEngineView>
#include <QWebEngineProfile>
#include <QString>
#include <QFile>
#include <QByteArray>

#include <QWebEngineUrlRequestInterceptor>
#include <QDebug>

class RequestInterceptor : public QWebEngineUrlRequestInterceptor
{
public:
    explicit RequestInterceptor(QObject * parent = Q_NULLPTR) :  QWebEngineUrlRequestInterceptor(parent) {}
    virtual void interceptRequest(QWebEngineUrlRequestInfo & info)   Q_DECL_OVERRIDE;
};

void RequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo & info)
{
    // Intercepting the requested URL
    QUrl url = info.requestUrl();
    qDebug() << "Request URL: " << url;

    // Set HTTP header
    QByteArray httpHeaderName = "Referrer-Policy";
    QByteArray httpHeaderValue = "no-referrer";
    info.setHttpHeader(httpHeaderName, httpHeaderValue);
}

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);

    QWebEngineView * view = new QWebEngineView;
    RequestInterceptor * interceptor = new RequestInterceptor(view);
    QWebEngineProfile * profile = new QWebEngineProfile(view);
    profile->setRequestInterceptor(interceptor);
    QWebEnginePage * page = new QWebEnginePage(profile, view);
    view->setPage(page);

    QFile file("SamlRequest.htm");

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        return -1;
    }

    QByteArray samlArray;
    while (!file.atEnd())
    {
        samlArray += file.readLine();
    }

    QString samlStr(samlArray);
    view->setHtml(samlStr);

    view->resize(1024, 750);
    view->show();

    return app.exec();
}
...