我有一个ASP.NET Web应用程序,我根据用户点击的菜单从一个站点渲染不同的画面仪表板。我有多个菜单,每个菜单都与一个画面URL相关联。
已实施Tableau受信任的身份验证以从tableau服务器获取受信任的票证。检索完故障单后,我会将故障单附加到仪表板URL以及每个菜单的服务器名称。
受信任的票务模块工作正常,可视化在我的Web应用程序中呈现。但是,我经常会收到一条消息"无法找到未过期的机票"错误。
在检查此错误时,这是由于票证调用重复。
我联系了对此的支持,得到了一个回复,我可以在我的信任票务中添加client_ip。
我无法找到与在受信任的票务中添加client_ip相关的任何代码文章。
以下是我信任的门票代码。
public class TableauTicket
{
public string getTableauTicket(string tabserver, string sUsername)
{
try
{
ASCIIEncoding enc = new ASCIIEncoding();
string postData = string.Empty;
string resString = string.Empty;
postData = "username=" + sUsername + "";
// FEATURE 816 END - Custom Visualization - KV
if (postData != string.Empty)
{
byte[] data = enc.GetBytes(postData);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(tabserver + "/trusted");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
req.ContentLength = data.Length;
Stream outStream = req.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader inStream = new StreamReader(stream: res.GetResponseStream(), encoding: enc);
resString = inStream.ReadToEnd();
inStream.Close();
return resString;
}
else
{
resString = "User not authorised";
return resString;
}
}
catch (Exception ex)
{
string resString = "User not authorised";
return resString;
string strTrailDesc = "Exception in tableau ticket - " + ex.Message;
}
}
public int Double(int i)
{
return i * 2;
}
}

任何人都可以告诉我如何在受信任的票务代码中传递client_ip?
此外,客户端IP将针对每个用户进行更改,以及如何在受信任的票证中处理这些内容?
更新
我使用tableau提供的源代码解决了如何在SharePoint中嵌入视图的问题。
以下是可以帮助用户解决相同问题的代码。
string GetTableauTicket(string tabserver, string tabuser, ref string errMsg)
{
ASCIIEncoding enc = new ASCIIEncoding();
// the client_ip parameter isn't necessary to send in the POST unless you have
// wgserver.extended_trusted_ip_checking enabled (it's disabled by default)
string postData = "username=" + tabuser + "&client_ip=" + Page.Request.UserHostAddress;
byte[] data = enc.GetBytes(postData);
try
{
string http = _tabssl ? "https://" : "http://";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(http + tabserver + "/trusted");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
// Write the request
Stream outStream = req.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
// Do the request to get the response
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader inStream = new StreamReader(res.GetResponseStream(), enc);
string resString = inStream.ReadToEnd();
inStream.Close();
return resString;
}
// if anything bad happens, copy the error string out and return a "-1" to indicate failure
catch (Exception ex)
{
errMsg = ex.ToString();
return "-1";
}
}
答案 0 :(得分:0)
假设你的代码正在运行,(我在Java中完成了这个部分而不是asp.net的专家),你所要做的就是添加类似的东西:
postData = postData +"&client_ip=" +<variable for client IP>;
在tableau服务器上处理它的方式是:
在Tableau服务器上启用wgserver.extended_trusted_ip_checking。 see details here
Tableau将匹配您在POST请求中传递的客户端IP&#39; client_ip = XXX.XXX.XXX.XXX&#39;获取令牌时,使用浏览器尝试访问tableau服务器的机器的实际IP。