我使用带有标头身份验证的 Qlik Sense,但由于某种原因,当我运行对 qrs/apps/full 的请求时?Xrftoken=lskadjfalkjd 我只得到公共应用程序。如何设置用户属性以检索用户的所有应用?
以下是我在 php 中植入的 qlik 请求:
private static function getRequestHeaders($email)
{
$user = AuthClass::getUser();
$id = $user['UserId'];
$dir = $user['UserDirectory'];
$atts = $user['Attributes'];
$securityHeaders = 'SecureRequest=true; Context=AppAccess;';
foreach ($atts as $attr)
{
$key = key($attr);
$val = $attr[$key];
$securityHeaders .= "{$key}={$val}; ";
}
return [
'headers' =>
[
'X-Qlik-xrfkey: ' . self::$xrfToken,
'hdr-usr: Users\' . $email,
'Accept: application/json',
'Content-Type: application/json',
"X-Qlik-Security: $securityHeaders",
"X-Qlik-User: UserDirectory={$dir};UserId={$id}",
]
];
}
$res = CurlHelper::get(
'server/qps/app/full?Xrftoken=039498543',
self::getRequestHeaders($email)
);
一些没有PHP背景的人的笔记:
- 你打电话给
qps/app/full
而不是qrs/app/full
- 它应该是Xrfkey而不是Xrftoken,例如
qrs/app/full?Xrfkey=01234567890123456
- Xrfkey 必须是 16 个字符的字母数字
- 这假设 https://server.company.com 有一个虚拟代理,其标头身份验证没有前缀
- 后端集成最好直接通过端口 4242 调用 QRS,这需要一些额外的内容:
- 使用密钥传递内部客户端证书
- 将内容从使用虚拟代理中的标头更改为使用
X-Qlik-User: UserDirectory=<directory>; UserId=<userid>
引用:
- Xrfkeys
- X-Qlik-User
- 使用 PHP 进行连接