相关疑难解决方法(0)

Asp.NET Identity 2给出"无效令牌"错误

我正在使用Asp.Net-Identity-2,我正在尝试使用以下方法验证电子邮件验证码.但我收到"无效令牌"错误消息.

  • 我的应用程序的用户管理器是这样的:

    public class AppUserManager : UserManager<AppUser>
    {
        public AppUserManager(IUserStore<AppUser> store) : base(store) { }
    
        public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
        {
            AppIdentityDbContext db = context.Get<AppIdentityDbContext>();
            AppUserManager manager = new AppUserManager(new UserStore<AppUser>(db));
    
            manager.PasswordValidator = new PasswordValidator { 
                RequiredLength = 6,
                RequireNonLetterOrDigit = false,
                RequireDigit = false,
                RequireLowercase = true,
                RequireUppercase = true
            };
    
            manager.UserValidator = new UserValidator<AppUser>(manager)
            {
                AllowOnlyAlphanumericUserNames = true,
                RequireUniqueEmail = true
            };
    
            var dataProtectionProvider = options.DataProtectionProvider;
    
            //token life span is 3 hours …
    Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc-5 asp.net-identity-2

59
推荐指数
7
解决办法
5万
查看次数

ASP.net Identity 2.0退出另一个用户

我正在使用asp.net MVC和ASP.net Identity 2.0.

在我的网站上管理员可以选择禁止用户,我希望当用户被禁止他自动从网站注销时.

我知道我可以通过电话退出当前用户

AuthenticationManager.SignOut();
Run Code Online (Sandbox Code Playgroud)

但是可以注销另一个用户吗?或者可能缩短他的会话时间 还是什么?

我知道我可以对控制器进行全局过滤,禁止禁止用户访问但是过滤器会针对每个用户运行,所以我对这个解决方案并不满意.

c# asp.net-mvc asp.net-identity

23
推荐指数
2
解决办法
7917
查看次数

ASP.NET身份检查用户角色不起作用

我有一个ASP.NET MVC 5应用程序.我正在使用标准的ASP.NET身份提供程序进行用户和角色管理.重要的是我从自己的存储库项目中使用IdentityUser,但这似乎没问题.我可以注册,登录,编辑用户和管理他们的角色.

我使用以下行将用户添加到Role:

UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这似乎在DB级别工作.

但是,我不能使用基于角色的身份验证,实际上就是简单

HttpContext.User.IsInRole("Administrator")
Run Code Online (Sandbox Code Playgroud)

不起作用.

[Authorize(Roles="Administrator")]
Run Code Online (Sandbox Code Playgroud)

不起作用.

我只能用这种方法检查用户是否是管理员:

UserManager.IsInRole(userID, "Administrator").
Run Code Online (Sandbox Code Playgroud)

为什么?

在我发现的每个教程中,一切正常.可能是不同的项目存储库?或者ASP.NET身份这么多?

请指教,

c# asp.net asp.net-mvc asp.net-identity

21
推荐指数
2
解决办法
2万
查看次数

如何在ASP .NET MVC 5中为AspNetUser创建SecurityStamp

当我通过Register操作创建用户时,应用程序用户运行SecurityStamp.当我添加用户时:

if (!context.Users.Any()) {
                System.Diagnostics.Debug.WriteLine("INSIDE");
                var hasher = new PasswordHasher();
                try {
                    var users = new List<ApplicationUser> { 
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "informatyka4444@wp.pl", UserName = "informatyka4444@wp.pl"},
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "informatyka4445@wp.pl", UserName = "informatyka4445@wp.pl"}
                        };

                    users.ForEach(user => context.Users.AddOrUpdate(user));

                    context.SaveChanges();
                } catch (DbEntityValidationException e) {
                    System.Diagnostics.Debug.WriteLine("EXC: ");
                    foreach (DbEntityValidationResult result in e.EntityValidationErrors) {
                        foreach (DbValidationError error in result.ValidationErrors) {
                            System.Diagnostics.Debug.WriteLine(error.ErrorMessage);
                        }
                    }

                }
            }
Run Code Online (Sandbox Code Playgroud)

用户没有获得安全标记:

在此输入图像描述

然后当我想登录时,我得到:

在此输入图像描述

问题:如何SecurityStamp为用户生成?

c# asp.net-mvc entity-framework seed asp.net-identity

21
推荐指数
1
解决办法
2万
查看次数

撤消ASP.NET Identity 2.0中UserTokenProvider生成的令牌

有没有办法撤销ASP NET Identity 2.0中用户管理器生成的电子邮件验证令牌?

上下文
我想让用户重新发送确认电子邮件.为此,我使用:生成一个新令牌UserManager.GenerateEmailConfirmationTokenAsync(user.Id),并使用新生成的令牌发送电子邮件.不幸的是,当我这样做时,以前生成的令牌仍在工作,有没有办法撤销它们?

示例代码
在UserManager类中:

manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(options.DataProtectionProvider.Create("ASP.NET Identity"));
Run Code Online (Sandbox Code Playgroud)

在AccountController中:

var user = await UserManager.FindByEmailAsync("email");

// All generated tokens below will work to confirm the email. 
// I only want the last token to be valid when confirming the email address.
var token1 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token2 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token3 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token4 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var token5 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

var result = await UserManager.ConfirmEmailAsync(user.Id, token5);
Run Code Online (Sandbox Code Playgroud)

还欢迎有关生成的令牌的存储位置以及如何生成这些令牌的信息!

如果您能将此信息发送给我,我将不胜感激.

c# asp.net asp.net-mvc-5 asp.net-identity

17
推荐指数
1
解决办法
9894
查看次数

MVC 5 AddToRole在运行之前需要注销吗?

我发现如果我将用户添加到ASP身份中的角色,它会在我退出并重新登录之后才会生效.我是否需要做一些事情来刷新用户的角色而不强迫用户登录先关掉?

以下是我将用户添加到角色的方式.

var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var userId = HttpContext.Current.User.Identity.GetUserId();

userManager.AddToRole(userId, roleName);
Run Code Online (Sandbox Code Playgroud)

然后,几乎立即,我将用户重定向到此操作方法.我可以在数据库中告诉我已经添加到正确的角色,但MVC仍然将我重定向到登录页面.但是,如果我退出,重新登录,并尝试转到此操作方法,它可以正常工作.

    [Authorize(Roles = RecoveryStandardRoles.ServiceProvider)]

    public partial class CertifyController : Controller

{
    #region Public Methods and Operators

    public virtual ActionResult CompanyProfile()
    {
        return this.View();
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

感谢您花时间看我的问题!

asp.net-mvc-5 asp.net-identity

11
推荐指数
3
解决办法
7717
查看次数

如何在ASP.NET Core Identity中注销其他用户

如何在ASP.NET Core Identity中注销另一个用户(不是当前记录的用户).

我知道有一个SignOutAsync()方法SignInManager,但似乎没有覆盖接受用户作为参数.我正在寻找类似的东西:

signInManager.SignOutAsync(user);
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc asp.net-core asp.net-core-identity

11
推荐指数
1
解决办法
8233
查看次数

如何使用ASP.NET标识使声明无效?

我刚刚将一些应用程序升级到ASP.NET MVC 5.我已经使用ASP.NET Membership几年了,并且正在探索切换到ASP.NET Identity的可能性.

我正在构建一个小的测试应用程序,我已经进行了身份验证(针对活动目录和自定义SQL Server架构,具体取决于用户),甚至通过ClaimsIdentity在签署用户之前添加角色声明进行授权(显然是box Authorize属性实际上将违反所提供的任何索赔信息).

声明默认存储在身份验证cookie中很酷.但是,当有关用户的信息发生更改(即,从角色中添加或删除它们)时,这会产生问题.

显然,我可以Authorize像往常一样完成自己的属性.如果我这样做,我只会一起跳过索赔,只需按照请求检查数据库中的角色.

有没有办法在ASP.NET身份中使用声明并知道它们何时不再有效?框架是否提供了解决此问题的任何选项?

asp.net asp.net-mvc claims-based-identity asp.net-mvc-5 asp.net-identity

10
推荐指数
1
解决办法
2695
查看次数

ASP.NET标识 - 强制使用安全戳重新登录

那么什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?我们了解到ASP.NET Identity具有安全标记功能,用于使用户登录cookie无效,并强制他们重新登录.

在我的MVC应用程序中,管理员可以归档用户.当拱形时,它们应该立即被注销并被迫再次登录(这将因为它们被存档而拒绝它们).

我怎样才能做到这一点?我知道安全标记是关键.默认设置如下所示:

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider {
            // Enables the application to validate the security stamp when the user logs in.
            // This is a security feature which is used when you change a password or add an external login to your account.  
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(30),
                regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        }
    });
Run Code Online (Sandbox Code Playgroud)

通过实验,如果我将validateInterval设置为1分钟,然后在数据库中手动破解用户安全标记,那么他们将被迫重新登录,但仅在该时间段过去之后.

有没有办法让这个瞬间,或者只是将间隔设置为一个低时间段并等待(或实现我自己的OnValidateIdentity检查每个请求)

谢谢

asp.net authentication asp.net-mvc asp.net-mvc-5 asp.net-identity

10
推荐指数
1
解决办法
7312
查看次数

ASP.NET身份,立即将另一个用户添加到角色(他们不必再次注销)

首先,我知道这个问题:MVC 5 AddToRole需要在它运行之前注销吗?

而这一个:什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?

所以请不要将其标记为副本.

我正在尝试将另一个用户添加到角色中(即我们添加到该角色的用户不是当前用户.如果是,则我链接到的第一个问题的答案就足够了.)

像这样:

IdentityResult result = await userManager.AddToRoleAsync(userID, roleName);
Run Code Online (Sandbox Code Playgroud)

我正在做的两种情况是:从管理页面,当前用户是管理员; 以及基本身份验证保护的webhook(根本没有当前用户).

问题:如果此更改适用的用户已登录并使用该应用程序,我需要立即应用"添加到角色"更改.他们不应该退出并再次进行更改,而且需要立即进行.

感谢大家.

编辑:顺便说一下,User.IsInRole(roleName)要求注销和登录以反映被添加到新角色.UserManager.IsInRole(userID,roleName)没有,因为(我假设)它直接进入数据库表进行检查.但是如果用户点击了一个以他们刚刚添加的角色担保的动作方法,他们仍然需要再次登录,这是公平的.如果有办法解决这个问题仍然很好奇.

编辑:下面是授权属性的源代码:https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/AuthorizeAttribute.cs

它使用User.IsInRole,这本质上是我们需要再次登录的原因.似乎覆盖的方法是AuthorizeCore(HttpContextBase httpContext).我现在不是很勇敢或者不够好,但是如果你想要有很多人会发现这很有帮助.

c# asp.net asp.net-mvc asp.net-roles asp.net-identity

10
推荐指数
3
解决办法
2276
查看次数

如何使用Asp.Net Identity 2将用户添加到角色后使.AspNet.ApplicationCookie无效?

我有两个与此相关的问题:

1)我需要使用Asp.Net Identity 2将一些远程用户添加/删除后,使invalid.AspNet.ApplicationCookie无效.我尝试使用UpdateSecurityStamp,但由于没有更改密码或用户名,因此SecurityStamp保持不变.当我使用ApplicationRoleManger时,我可以看到用户角色已更新,但在User.Identity声明中,它们保持不变.

2).AspNet.ApplicationCookie验证如何工作以及如何访问它?

我试图使用此代码,但没有任何效果

什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?

更新:这是我的Cookie验证设置:

 app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromSeconds(0),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
                OnApplyRedirect = ctx =>
                {
                    if (!IsApiRequest(ctx.Request))
                    {
                        ctx.Response.Redirect(ctx.RedirectUri);
                    }
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

我可以看到user.GenerateUserIdentityAsync(manager)仅在登录时被命中.

c# asp.net authentication authorization asp.net-identity

9
推荐指数
2
解决办法
4647
查看次数

身份是经过身份验证的cookie

我有一个关于ASP.NET身份提供程序的问题.我已经建立了一个系统,您可以对用户和角色执行CRUD操作,但我遇到了问题.如果我要删除已经过身份验证(登录)的用户,他仍然可以在网站上执行操作,因为他仍然在本地计算机上保留身份验证和授权cookie.当用户注销时,他无法再访问该站点.

我的问题: 有没有办法在请求页面时这样做,它会检查用户是否存在于数据库中?另一种方法可能是不存储"角色"cookie并检查(通过数据库)用户是否具有访问页面所需的角色.我不知道如何配置它.任何帮助表示赞赏.

c# asp.net asp.net-identity

5
推荐指数
1
解决办法
429
查看次数

如何在MVC中更新用户角色

我使用了将用户添加到角色的"AddToRole".但是,此更改无法立即应用,此用户必须注销并登录才能应用.

那么如何立即更新此更改?

谢谢!

asp.net asp.net-mvc asp.net-identity

2
推荐指数
1
解决办法
1877
查看次数