使用域用户 iis httpModule 进行身份验证时,替换 REMOTE_USER 服务器变量中的反斜杠
Replace backslash in REMOTE_USER Server Variable when authenticating with domain user iis httpModule
我正在使用域帐户在 IIS 中使用 CRM 运行 进行身份验证。我想将 REMOTE_USER 服务器变量中的反斜杠替换为 return 而不是 Domain\User Domain_User 或类似的东西,因为当反斜杠为 return 时它会抛出错误到数据库。我尝试编写一个 HTTPModule,但它 returns
"Operation is not supported on this platform" 此行错误:
oServerVars["REMOTE_USER"] = remote_user.Replace("\", "_");
我使用的代码如下:
private void Context_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
//Pulling out the Server Variables Collection
NameValueCollection oServerVars = context.Request.ServerVariables;
//Request REMOTE_USER Variable
if (!string.IsNullOrEmpty(oServerVars["REMOTE_USER"]))
{
string remote_user = oServerVars["REMOTE_USER"];
//Locate the server variables field in the collection
oServerVars = (NameValueCollection)context.Request.GetType().GetField("_serverVariables", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(context.Request);
//Locate the readonly fields
PropertyInfo oReadable = oServerVars.GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
//Setting the new value
oReadable.SetValue(oServerVars, false, null);
oServerVars["REMOTE_USER"] = remote_user.Replace("\", "_");
oReadable.SetValue(oServerVars, true, null);
}
}
我也试过将代码放在 BeginRequest 中,但没有成功。有什么办法可以实现吗?
原来是做不到。我能找到的唯一其他方法是创建一个新的服务器变量,将其添加到集合中并调用该变量。
我正在使用域帐户在 IIS 中使用 CRM 运行 进行身份验证。我想将 REMOTE_USER 服务器变量中的反斜杠替换为 return 而不是 Domain\User Domain_User 或类似的东西,因为当反斜杠为 return 时它会抛出错误到数据库。我尝试编写一个 HTTPModule,但它 returns "Operation is not supported on this platform" 此行错误:
oServerVars["REMOTE_USER"] = remote_user.Replace("\", "_");
我使用的代码如下:
private void Context_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
//Pulling out the Server Variables Collection
NameValueCollection oServerVars = context.Request.ServerVariables;
//Request REMOTE_USER Variable
if (!string.IsNullOrEmpty(oServerVars["REMOTE_USER"]))
{
string remote_user = oServerVars["REMOTE_USER"];
//Locate the server variables field in the collection
oServerVars = (NameValueCollection)context.Request.GetType().GetField("_serverVariables", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(context.Request);
//Locate the readonly fields
PropertyInfo oReadable = oServerVars.GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
//Setting the new value
oReadable.SetValue(oServerVars, false, null);
oServerVars["REMOTE_USER"] = remote_user.Replace("\", "_");
oReadable.SetValue(oServerVars, true, null);
}
}
我也试过将代码放在 BeginRequest 中,但没有成功。有什么办法可以实现吗?
原来是做不到。我能找到的唯一其他方法是创建一个新的服务器变量,将其添加到集合中并调用该变量。