gpt4 book ai didi

c# - 防止 ASP.NET MVC 应用程序引用旧的 HttpContextBase WindowsIdentity

转载 作者:行者123 更新时间:2023-11-30 18:45:33 26 4
gpt4 key购买 nike

我正在开发一个 C# ASP.NET MVC 应用程序,它使用 Windows 模式身份验证在 Intranet 上运行,具有以下 <system.web> Web.config 部分文件:

<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<identity impersonate="true" />
</system.web>

我已经创建了自己的类来扩展 AuthorizeAttribute根据连接的 Windows 帐户做一些处理。在重写内 AuthorizeCore功能我捕获WindowsIdentity来自 HttpContextBase.User.Identity 的对象并用它来提取名称、域等数据。然后我继续使用这些数据来查询我数据库中的某些记录,结果决定了这个函数是返回 true 还是 false。返回 false 后,浏览器会弹出一个简单的用户名和密码框,允许用户提供不同的 Windows 帐户/密码来使用,而不是当前用户登录时使用的帐户/密码。

AuthorizeCore 的示例函数在我的项目中看起来如下:

protected override bool AuthorizeCore(HttpContextBase httpContext)  
{
using (DbEntities dbContext = new DbEntities ())
{
bool authorize = allowedGroups.Length == 0;
string domainAndUserName = httpContext.User.Identity.Name;
int userNameIndex = domainAndUserName.IndexOf(@"\", StringComparison.OrdinalIgnoreCase) + 1;
string userName = domainAndUserName.Substring(userNameIndex);

try
{
// Process account and query database...
// set authorize to true if criteria met, otherwise false...
}
catch (EntityException ex)
{
authorize = false;
}
catch (SqlException ex)
{
authorize = false;
}

return authorize;
}
}

假设使用 Windows 帐户 USER_1 的用户连接,AuthrorizeCore然后函数设置 domainAndUserName变量为 DOMAIN\USER_1 (如上所示),查询数据库,最后确定它未被授权。出现用户名/密码框,用户现在为已授权的 USER_2 输入正确的凭据。用户现在可以访问请求的资源。现在,如果用户关闭浏览器,重新打开它,并请求资源(或不同的资源)WindowsIdentity这是从 HttpContextBase 中提取的对象似乎引用了旧的 USER_2 帐户而不是当前的 USER_1 帐户(domainAndUserName 变量以 DOMAIN\USER_2 而不是 DOMAIN\USER_1 的值结束)。

看来,如果我稍等一下,它就会使用 USER_1 WindowsIdentity所以它似乎有一些缓存功能在起作用,但我无法验证或查明这一点。我在网上做了一些搜索,并尝试在 IIS 服务器上完全禁用缓存以及清除浏览器缓存,但我仍然遇到这种情况。关于如何始终拥有 AuthorizeCore 的任何帮助或指导函数的 HttpContextBase.User.Identity始终引用当前的 Windows 帐户将不胜感激。

最佳答案

您可以尝试使用 .current

HttpContext.Current.User.Identity.Name  

关于c# - 防止 ASP.NET MVC 应用程序引用旧的 HttpContextBase WindowsIdentity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com