簡體   English   中英

Owin認證時間過長

[英]Owin Authentication Taking Too Long

在本地運行時,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);

我已將“執行代碼優先遷移”設置為true發布了我的應用程序。 我已經向數據庫播種了一個admin,但是它不返回任何東西,只需要花費很多執行時間。

這是我的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);

似乎Azure不支持IdentityUser( MY ASSUMPTION )的種子。 由於我試圖登錄種子的IdentityUser方法

 await usermanager.FindAsync(username,password)

似乎永遠找不到用戶。 但是,這並不能解釋為什么注冊方法不起作用...

 await UserManager.CreateAsync(user, model.Password)

但是,當我發布並且確實指定了執行代碼優先遷移時,所有這些都出現了。

因此,我需要一個管理員用戶,因此現在我發布了禁用Execute First Migration的Web API。 對於我的Register方法,這就是我所做的..(病理解決方案)。

     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");
     }

我仍然希望有一個真正的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM