DataZen如何使用header认证?
How to use header authentication with DataZen?
我们正在使用 DataZen 通过仪表板可视化一些数据。
我们想使用 header 身份验证,但文档没有提供任何信息 header 字段要用 external_auth_key
.
设置
有人知道在使用 DataZen 的 header 身份验证时要设置哪些 header 字段吗?
快速前言:确实不应该使用此功能。它没有很好的记录,因为它几乎从来都不是设置服务器的正确方法。您应该始终认真考虑替代方案,例如默认模式(Datazen 为您处理凭据)或 better-yet、Active Directory 联合身份验证服务。
外部身份验证是一种相对不安全的方法,因为所有信任都放在代理上。除非您绝对需要它并且您没有使用 Active Directory,否则通常应该避免使用它。
您必须告诉 Datazen 要查找哪个 header 或 cookie。您可以通过控制面板 UI.
请注意 "Authentication key" 设置为 case-sensitive,因此我通常建议坚持全部小写。
设置好设置后,只需转到您的代理(以您选择实现的任何形式)并使用该名称设置 header 和 1:1 Datazen 用户名应该进行身份验证。
例如,如果我使用上述设置登录代理,代理应发出以下请求:
GET /viewer HTTP/1.1
thisistheheadername: v-mhauge
...
读取该 header 后,Datazen 服务器将像该用户已登录一样响应。
免责声明:我是 Microsoft 的支持工程师,付费支持 Datazen。
更改服务配置:
<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';
}
结果 ==> 成功了!
我可以通过 fiddler 传递 header 信息,它似乎可以工作,但我终究无法弄清楚如何通过 asp 网络应用程序传递它与 iframe 中的引用站点。我已经创建了这个 class,但是 header 只是以某种方式丢失了它。
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 成功完成 web-request,但是我无法使用 iframe 完成它..
我们正在使用 DataZen 通过仪表板可视化一些数据。
我们想使用 header 身份验证,但文档没有提供任何信息 header 字段要用 external_auth_key
.
有人知道在使用 DataZen 的 header 身份验证时要设置哪些 header 字段吗?
快速前言:确实不应该使用此功能。它没有很好的记录,因为它几乎从来都不是设置服务器的正确方法。您应该始终认真考虑替代方案,例如默认模式(Datazen 为您处理凭据)或 better-yet、Active Directory 联合身份验证服务。
外部身份验证是一种相对不安全的方法,因为所有信任都放在代理上。除非您绝对需要它并且您没有使用 Active Directory,否则通常应该避免使用它。
您必须告诉 Datazen 要查找哪个 header 或 cookie。您可以通过控制面板 UI.
请注意 "Authentication key" 设置为 case-sensitive,因此我通常建议坚持全部小写。
设置好设置后,只需转到您的代理(以您选择实现的任何形式)并使用该名称设置 header 和 1:1 Datazen 用户名应该进行身份验证。
例如,如果我使用上述设置登录代理,代理应发出以下请求:
GET /viewer HTTP/1.1
thisistheheadername: v-mhauge
...
读取该 header 后,Datazen 服务器将像该用户已登录一样响应。
免责声明:我是 Microsoft 的支持工程师,付费支持 Datazen。
更改服务配置:
<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';
}
结果 ==> 成功了!
我可以通过 fiddler 传递 header 信息,它似乎可以工作,但我终究无法弄清楚如何通过 asp 网络应用程序传递它与 iframe 中的引用站点。我已经创建了这个 class,但是 header 只是以某种方式丢失了它。
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 成功完成 web-request,但是我无法使用 iframe 完成它..