我创建了一个ASP.Net MVC 5
Web 应用程序,其服务可供匿名用户使用。当匿名用户使用 Web 服务时,它会从数据库中进行一些查询。然而,出于安全原因,我的客户想要跟踪匿名用户的“可疑”活动。其中之一包括匿名用户每天查询多少次(以防止大量数据被“窃取”)。
有什么方法可以捕获这些信息吗?
对于注册用户,我们可以在被ApplicationUser
调用者中创建额外的属性QueryNo
并像这样添加它Claim
:
public class ApplicationUser : IdentityUser {
public uint QueryNo { get; set; } //how many times this user has queried
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
userIdentity.AddClaim(new Claim("QueryNo", QueryNo));
return userIdentity;
}
}
当我们想要跟踪它的活动时,我们可以简单地增加它的QueryNo
每次查询活动。例如,当我们想要显示它时,我们可以简单地定义一个扩展,Identity
如下所示:
public static class IdentityExtensions {
public static string GetQueryNo(this IIdentity identity) {
if (identity == null) {
throw new ArgumentNullException("identity");
}
var ci = identity as ClaimsIdentity;
if (ci != null) {
return ci.FindFirstValue("QueryNo");
}
return null;
}
}
然后像这样在视图中简单地使用它:
<p>No Of Query: @User.Identity.GetQueryNo()</p>
但是我们如何跟踪匿名用户的活动(例如查询次数)?