Owin认证过长

时间:2018-03-09 14:24:29

标签: c# asp.net-web-api2 owin

Owin身份验证过程在本地运行时花费的时间不到8秒,但在部署时会超时。这是我实现的令牌生成器

ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,OAuthDefaults.AuthenticationType);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, null);
context.Validate(ticket);

我的DBContext

protected override void OnModelCreating(DbModelBuilder builder)
    {
        builder.Conventions.Remove<PluralizingTableNameConvention>();

        builder.Entity<IdentityUserClaim>().ToTable("UserClaim").HasKey<Int32>(r => r.Id);
        builder.Entity<IdentityUserLogin>().ToTable("UserLogin").HasKey<string>(l => l.UserId);
        builder.Entity<IdentityRole>().ToTable("Role").HasKey<string>(r => r.Id);
        builder.Entity<User>().ToTable("User").HasKey(r => new{ r.IDNumber, r.UserName});
        builder.Entity<IdentityUser>().ToTable("User").HasKey<string>(r => r.UserName);
        builder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });
    }

我的DBContext构造函数

   public CrestfineContext():
        base("Default", throwIfV1Schema: false)
    {

    }

我的Web.Config

 <connectionStrings>
   <add name="Default" providerName="System.Data.SQLClient" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;MultipleActiveResultSets=true;" />
 </connectionStrings>

无法弄清楚登录过程在服务器上花费这么长时间的原因。

修改

我注意到这行代码在执行期间花了太长时间

  User user = await userManager.FindAsync(context.UserName, context.Password);

我已将Execute Code First Migration设置为true发布了我的应用程序。我已经在数据库中播放了一个管理员但它没有返回任何内容只需要花费大量的执行时间。

这是我的UserManager类

public class AppUserManager : UserManager<User, string>
{
    public AppUserManager(IUserStore<User, string> store)
        :base(store)
    {

    }

    public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
    {
        var dbcontext = context.Get<CrestfineContext>();
        var manager = new AppUserManager(new UserStore<User>(dbcontext));

         return manager;
    }

}

我还注意到CreateAsync需要太长时间

  IdentityResult result = await UserManager.CreateAsync(user, model.Password);

1 个答案:

答案 0 :(得分:0)

似乎Azure不支持Seeding of IdentityUser( MY ASSUMPTION )。因为我试图登录种子的IdentityUser方法

 await usermanager.FindAsync(username,password)

似乎永远不会找到用户。但是,这并不能解释为什么寄存器方法不起作用......

 await UserManager.CreateAsync(user, model.Password)

然而,当我发布并且我确实指定了首次迁移的执行代码时,所有这些都出现了。

所以,我需要一个管理员用户,所以现在我已经发布了禁用了Execute First Migration的web api。对于我的Register方法,这就是我所做的......(Pathetic Solution)。

     if(user.UserName == "xxx@****.com")
     {
        var rolemanager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new CrestfineContext()));
        var manager = new UserManager<User>(new UserStore<User>(new CrestfineContext()));

        rolemanager.Create(new IdentityRole { Name = "Admin" });
        manager.AddToRole(user.Id, "Admin");
     }

仍然希望有一个真正的解决方案。