- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在网上阅读大量有关身份验证和授权的内容,并最终确定了一些似乎有效的代码......但我并不完全理解它所做的一切(就 FormsAuthenticationTicket 而言)。
我正在使用的 MVC 应用程序将处理一些敏感数据,我想仔细检查我所做的与身份验证和授权相关的所有操作。
我正在使用 Windows 身份验证;
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
我在 SQL Server 中有一组表,其中包含其他用户和权限信息。
在我的 Global.asax 中,我有以下受启发的方法
http://www.codeproject.com/Articles/5182/Insight-into-Security-Model-using-Principal-and-Id
protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
if (e.Identity == null || !e.Identity.IsAuthenticated)
{
//Redirect to error or access denied page
}
string userData = e.Identity.AuthenticationType;
var cachedUser = HttpContext.Current.Cache[e.Identity.Name] as User;
if (cachedUser == null)
{
var user = repo.GetUserByFullUserName(e.Identity.Name);
HttpContext.Current.Cache.Insert(e.Identity.Name, user, null, DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration);
cachedUser = HttpContext.Current.Cache[e.Identity.Name] as User;
}
var userIdentity = e.Identity.Name;
var formsAuthTicket = new FormsAuthenticationTicket(1, e.Identity.Name, DateTime.Now, DateTime.Now.AddMinutes(2), false, userData);
var encryptedTicket = FormsAuthentication.Encrypt(formsAuthTicket);
var httpcook = new HttpCookie("authCookie", encryptedTicket);
Response.Cookies.Add(httpcook);
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
var httpcook = Context.Request.Cookies["authCookie"];
var formsAuthTicket = FormsAuthentication.Decrypt(httpcook.Value);
var cachedUser = GetCachedUser(formsAuthTicket.Name);
if (cachedUser == null)
{
cachedUser = CreateCachedUser(formsAuthTicket.Name);
}
var genIdentity = new GenericCustomIdentity(cachedUser, Request.IsAuthenticated, formsAuthTicket.UserData);
var genPrincipal = new GenericCustomPrincipal(genIdentity, cachedUser);
HttpContext.Current.User = genPrincipal;
}
}
这是我的问题:
为什么 WindowsAuthentication_OnAuthenticate 方法中有 FormsAuthenticationTicket?我不能在 WinAuth 方法中构建我的 Identity 和 Primary 对象吗?
将用户数据存储在 HttpContext.Current.Cache 中是否存在安全风险?由于这些方法被多次调用,我不想每次请求都访问数据库。有更好/更安全的替代方案吗?
我不熟悉使用 FormsAuthenticationTickets、Identity 和 Principal,因此我们将不胜感激任何意见或建议。抱歉,这不是一个问题。
最佳答案
Why have a FormsAuthenticationTicket in the WindowsAuthentication_OnAuthenticate method? Can't I just build my Identity and Principal objects in the WinAuth method?
身份和主体对象仅在客户端当前调用/请求期间存在。它们是 HttpContext 的一部分由于缺乏更好的术语,并且在请求结束时处置。一旦经过身份验证的人再次连接,就会创建一个新请求,并且默认情况下不会对他们进行身份验证。
FormsAuthenticationTicket (默认情况下)在客户端使用 cookie 来存储每个后续请求的身份验证信息。这允许 Application_AuthenticateRequest
方法使用 cookie 重新授权请求。
Is storing User data in HttpContext.Current.Cache a security risk? Since these methods are called numerous times I don't want to hit the db every single request. Is there a better/more secure alternative?
HttpContext.Cache存储在内存中。如果服务器重置或应用程序池因任何原因重新启动,缓存就会消失。
是的,这是一个安全风险,您存储用户信息的是服务器内存。然而,风险非常小,除非有人拥有您的代码来查看您如何使用缓存,并且可以上传代码来读取缓存。
I am unfamiliar with using FormsAuthenticationTickets, Identity, and Principal so any comments or suggestions would be greatly appreciated. Sorry, this wasn't a question.
链接到 HttpContext.User (IPrincipal) 怎么样?其属性 Identity 类型为 IIdentity 。这不是最具描述性的答案,但这两个界面都非常基本。
关于asp.net-mvc-4 - 为什么将 FormsAuthenticationTicket 与 Windows 身份验证结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098426/
我正在寻找一种解决方案,我们可以在其中制作具有很长有效期的 FormsAuthenticationTicket(和相应的 cookie)。这可以通过设置高值或使用滑动过期来实现,但是当网站的应用程序池
我一直在网上搜索并找到了许多奇怪的答案,而且我几乎尝试了所有这些答案。我的问题是这样的。我的登录页面包含: FormsAuthenticationTicket ticket = new FormsAu
这是我在登录成功时调用的函数。 (我对这个 FormAuthentication 很陌生) public static void CreateLoginCookie(User u) { Forms
我正在尝试重新创建我的 cookie,通常由 FormsAuthentication.SetAuthCookie() 生成的 cookie 以及 webconfig 中的内容。
在我的登录页面上,FormsAuthenticationTicket 被设置为带有一些自定义用户数据的持久性 cookie。现在我需要更改此自定义用户数据,因此它包含一个多参数。当以前登录的用户下次访
我正在根据本教程使用表单例份验证为 ASP.Net 4.0 站点实现自定义标识类: Forms Authentication Configuration and Advanced Topics 我想在
我正在努力了解 FormsAuthenticationTicket 类中的 isPersistent 属性的用途。 http://msdn.microsoft.com/en-us/library/ky
我在使用 FormsAuthenticationTicket 创建非持久性 cookie 时遇到问题。我想在票证中存储用户数据,所以我不能使用 FormsAuthentication.SetAuthC
我正在使用 FormsAuthenticationTicket并放置数据并在所有页面之间传递数据。 如果我们不更改任何数据,它将起作用。 所以,现在如果我想更改数据并将其传递给 cookie 并加密,
我正在尝试创建自己的依赖于 FormsAuthentication 的身份验证机制。我基本上使用 OAuth 来允许用户在授权服务器中进行身份验证,一旦他们通过身份验证,我需要使用 FormsAuth
我正在尝试检查用户当前 FormsAuthenticationTicket 的 Expired 属性,以查看身份验证期限是否已过期。但是,当期限到期时,我永远无法获得足够的信息来创建票证以进行检查。我
通常我使用用户的电子邮件地址(唯一),但在我当前的项目中,从 User.Identity.Name 中获取用户全名(非唯一)会更有利。 那么我为身份验证 cookie 名称设置的内容真的很重要吗? 请
当我在应用程序中创建身份验证机制时,我偶然发现了 FormsAuthenticationTicket.Version属性(property)。这些文档没有举例说明任何用例,我也没有发现它在其他地方使用
我已经使用自定义数据存储实现了我自己的自定义 MembershipProvider。到目前为止没有问题。我希望人们使用他们的电子邮件而不是用户名登录。因为我有自己的数据存储,所以这不是主要问题,我可以
我正在写一个 MVC 4 带有 的 Web 应用程序自定义认证授权 .当用户登录该站点时,我创建了一个 FormsAuthenticationTicket 并将其存储在 中 cookies publi
我正在考虑在我的 View 中使用它(Razor 语法)来获取我网站的用户名: @MySite.Helpers.Utils.UserName 这是 utils 类: public class Util
我有一个使用表单成员身份验证的 ASP.NET Web 应用程序。我们最近进行了渗透测试,标记的一个问题是窃取用户帐户的能力。如果 .ASPXAUTH cookie 值是在注销之前从用户复制的,用户可
在下面的方法中,我正在解密一个 cookie 以返回它,其中包含一个用户名。我尝试为它编写一个测试用例,但返回的 cookie 为空,因为它没有登录。谁能帮我写一个测试用例吗? public stri
我使用 FormsAuthenticationTicket 加密密码并将其存储到 session 值,当我检索它时我无法解密密码。 像下面这样加密 string pw="xyz"; F
我在 Logon 方法中设置 FormsAuthenticationTicket 以手动创建身份验证 cookie。如何验证该身份验证 cookie 并将其分配给 Current.User 对象。它是
我是一名优秀的程序员,十分优秀!