Я запускаю 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();
}