Tableau Unexpired Trusted Ticket - 包括ClientIP

时间:2017-07-07 14:48:46

标签: asp.net tableau tableau-server

我有一个ASP.NET Web应用程序,我根据用户点击的菜单从一个站点渲染不同的画面仪表板。我有多个菜单,每个菜单都与一个画面URL相关联。

已实施Tableau受信任的身份验证以从tableau服务器获取受信任的票证。检索完故障单后,我会将故障单附加到仪表板URL以及每个菜单的服务器名称。

受信任的票务模块工作正常,可视化在我的Web应用程序中呈现。但是,我经常会收到一条消息"无法找到未过期的机票"错误。

在检查此错误时,这是​​由于票证调用重复。

我联系了对此的支持,得到了一个回复,我可以在我的信任票务中添加client_ip。

Tableau Trusted Ticket

我无法找到与在受信任的票务中添加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";
            }
        }

1 个答案:

答案 0 :(得分:0)

假设你的代码正在运行,(我在Java中完成了这个部分而不是asp.net的专家),你所要做的就是添加类似的东西:

postData = postData +"&client_ip=" +<variable for client IP>;

在tableau服务器上处理它的方式是:

  1. 在Tableau服务器上启用wgserver.extended_trusted_ip_checking。 see details here

  2. Tableau将匹配您在POST请求中传递的客户端IP&#39; client_ip = XXX.XXX.XXX.XXX&#39;获取令牌时,使用浏览器尝试访问tableau服务器的机器的实际IP。