【发布时间】:2018-06-21 17:03:13
【问题描述】:
在使用 Tableau Server API 测试版 2018.2 时,该文档列出了一个 REST api 调用,用于注销/结束自定义应用程序和 Tableau Server 之间的安全会话。
通过使用用户名和密码执行 POST 请求(登录)来保护会话,该用户名和密码获取用于进一步请求的令牌。
会话结束后,要遵循的正确安全协议是退出/关闭会话。通过创建包含令牌的自定义身份验证标头字符串,这与请求流过程的方式非常相似。
执行注销时有一个显着的区别,即“注销”请求是 POST 请求,而不是 GET 请求。虽然这不应该造成问题,但它似乎是一个问题。
signout POST 请求与任何其他 POST 请求的主要区别在于,signout 请求的数据是 nil/null。基于 API 文档没有提及这一点,而是给出了一个简单的 CURL 示例:
curl "http://MY-SERVER/api/3.0/auth/signout" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"
...必须假设执行 POST 请求而不发送数据的行为被认为是正常功能。
我已经使用 TIdHTTP 组件尝试了这个请求,并为 post 调用中的 POST 数据参数提供了一个空的 TStringStream 或一个空的 TStringList:
try
tss := TStringStream.Create('');
http.Request.RawHeaders.AddValue('X-Tableau-Auth',FToken);
http.Post('http://<myserver>/api/3.0/auth/signout',tss);
finally
tss.Free;
end;
...但收到“HTTP/1.1 401 Unauthorized”异常。
如果我尝试使用 TWebBrowser 界面执行此操作:
var
flags,headers,postdata,targetframe,url: OleVariant;
begin
url := 'http://<myserver>/api/3.0/auth/signout';
headers := 'X-Tableau-Auth: ' + FToken + #13#10;
targetframe := 1;
flags := 1;
postdata := VarArrayCreate([0,1],varByte);
postdata[0] := 1;
Navigate2(URL,flags,targetframe,postdata,Headers);
end;
...我第一次意外启动 Internet Exploder,在 url 框中显示注销 url,并显示一个页面显示“导航已取消”。
如果我再次运行代码,我会再次启动不受欢迎的 Internet Exploder,这次会出现以下响应/页面:
<?xml version="1.0" encoding="UTF-8"?>
-<tsResponse xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tableau.com/api">
-<error code="401002">
<summary>Unauthorized Access</summary>
<detail>Invalid authentication credentials were provided.</detail>
</error>
我更愿意使用 TIdHttp 组件来完成这个小任务,但必须使用 TWebBrowser 来完成视觉任务,所以我也可以使用它。
这里是登出 api 调用的 Tableau Server 文档的链接:
【问题讨论】:
标签: http delphi post indy tableau-api