我们正在使用DataZen通过信息中心显示某些数据。
我们希望使用标头身份验证,但文档未提供使用external_auth_key
设置的标头字段的任何信息。
使用DataZen的标头身份验证时,有人知道要设置哪些标头字段吗?
答案 0 :(得分:2)
快速前言:不应该使用此功能。它没有很好地记录,因为它几乎从来都不是设置服务器的正确方法。您应该经常考虑其他替代方案,例如默认模式(Datazen为您处理凭据)或更好的Active Directory联合身份验证服务。
外部身份验证是一种相对不安全的方法,因为所有信念都放在代理中。除非你绝对需要它并且你没有使用Active Directory,否则通常应该避免使用它。
您必须告诉Datazen要查找哪个标头或Cookie。您可以通过控制面板UI执行此操作。
请注意"身份验证密钥"设置区分大小写,因此我通常建议坚持全部小写的内容。
一旦您设置了该设置,只需转到您的代理(以您选择的任何形式实现该设置)并设置具有该名称的标头,以及应进行身份验证的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做到这一点超出了我的想法..