如何在DataZen中使用标头身份验证?

时间:2015-07-09 11:15:59

标签: http authentication dashboard datazen-server

我们正在使用DataZen通过信息中心显示某些数据。

我们希望使用标头身份验证,但文档未提供使用external_auth_key设置的标头字段的任何信息。

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

3 个答案:

答案 0 :(得分:2)

快速前言:不应该使用此功能。它没有很好地记录,因为它几乎从来都不是设置服务器的正确方法。您应该经常考虑其他替代方案,例如默认模式(Datazen为您处理凭据)或更好的Active Directory联合身份验证服务。

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

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

Datazen External Authentication setup

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

一旦您设置了该设置,只需转到您的代理(以您选择的任何形式实现该设置)并设置具有该名称的标头,以及应进行身份验证的1:1 Datazen用户名。 / p>

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

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

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

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

答案 1 :(得分: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';
            }

结果==&gt;工作了!。

答案 2 :(得分:0)

我能够通过fiddler传递标题信息,它似乎可以工作,但我不能为我的生活找出如何通过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做到这一点超出了我的想法..