我在Ubuntu Linux 17.04上运行Qt 5.11,并尝试使用QWebEngineView加载SAML身份验证页面,该页面应该重定向到登录页面,但会导致错误页面和以下错误:
js:无法识别的Content-Security-Policy指令“引荐来源网址”。
我尝试拦截URL并将HttpHeader'Referer-Policy'设置为'no-referrer',然后使用QWebEngineUrlRequestInterceptor将其呈现给浏览器,但这会导致相同的问题。
我创建了一个示例测试,然后运行它来重现下面包含的问题。我正在从SAML请求的文件中读取HTML字符串,并将其设置为QWebEngineView。 SAML请求在大多数网站上都可以正常运行,但该特定网站却出现上述“引荐来源网址”错误。
我使用PingIdentity作为SAML SSO IDP,但它给我的是一个带有参考号的错误页面。我该如何调试呢?
#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();
}