1

我们正在使用DataZen通过仪表板可视化一些数据。

我们想使用标头身份验证,但文档没有提供任何信息,可以使用external_auth_key.

有人知道在使用 DataZen 的标头身份验证时要设置哪些标头字段吗?

4

3 回答 3

2

快速前言:这个特性真的不应该被使用。它没有很好地记录,因为它几乎从来都不是设置服务器的正确方法。您应该始终认真考虑替代方案,例如默认模式(Datazen 为您处理凭据)或更好的 Active Directory 联合服务。

外部身份验证是一种相对不安全的方法,因为所有信任都放在代理上。除非您绝对需要它并且您没有使用 Active Directory,否则通常应该避免使用它。


您必须告诉 Datazen 要查找哪个标头或 cookie。您可以通过控制面板 UI 执行此操作。

Datazen 外部身份验证设置

请注意,“身份验证密钥”设置区分大小写,因此我通常建议使用全部小写的内容。

设置好该设置后,只需转到您的代理(以您选择实现的任何形式)并设置一个具有该名称的标头,以及应验证的 1:1 Datazen 用户名。

例如,如果我使用上述设置登录代理,代理应该发出以下请求:

GET /viewer HTTP/1.1
thisistheheadername: v-mhauge
...

读取该标头后,Datazen 服务器将响应,就像该用户已登录一样。

免责声明:我是 Microsoft 的支持工程师,为支持 Datazen 付费。

于 2015-08-31T22:30:54.683 回答
2

更改服务配置:

<add key="authtype" value="external" />
<add key="external_auth_type" value="header" />
<add key="external_auth_key" value="zabr" />

重新启动服务。在 datazen 中创建的用户:zabr。授予用户权限:zabr。

改变了 nginx:

            location / {
                    proxy_pass http://tfs10.domain.ru:81/;
                    proxy_set_header zabr 'zabr';
            }

结果 ==> 成功了!

于 2015-10-06T05:43:53.430 回答
0

我能够通过提琴手传递标头信息,它似乎可以工作,但我无法终生弄清楚如何通过带有 iframe 中引用站点的 asp Web 应用程序传递它。我已经创建了这个类,但标题只是以某种方式丢失了这个。

Public Class CustomHttpModule
    Implements IHttpModule

    Public Sub New()
        ' Class constructor.
    End Sub


    ' Classes that inherit IHttpModule 
    ' must implement the Init and Dispose methods.
    Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init
        AddHandler app.BeginRequest, AddressOf app_BeginRequest
    End Sub


    Public Sub Dispose() Implements IHttpModule.Dispose
        ' Add code to clean up the
        ' instance variables of a module.
    End Sub

    Public Sub app_BeginRequest(ByVal o As Object, ByVal ea As EventArgs)
        Dim user As New ArrayList
        Dim headers As NameValueCollection = HttpContext.Current.Request.Headers
        Dim t As Type = headers.GetType()
        t.InvokeMember("MakeReadWrite", System.Reflection.BindingFlags.InvokeMethod Or System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance, Nothing, headers, Nothing)
        t.InvokeMember("InvalidateCachedArrays", System.Reflection.BindingFlags.InvokeMethod Or System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance, Nothing, headers, Nothing)
        user.Add("username")
        t.InvokeMember("BaseAdd", System.Reflection.BindingFlags.InvokeMethod Or System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance, Nothing, headers, New Object() {"headerkey", user})
        t.InvokeMember("MakeReadOnly", System.Reflection.BindingFlags.InvokeMethod Or System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance, Nothing, headers, Nothing)
    End Sub

End Class

我也能够通过 ASP 成功地做一个网络请求,但是如何用 iframe 来做这件事超出了我的范围。

于 2016-01-21T15:02:21.097 回答