2 Owin Contexts - 1用于站点登录,1用于管理其他站点登录

时间:2017-04-11 15:13:10

标签: c# .net asp.net-mvc owin

我有多个owin上下文。 1用于登录站点,另一个用于管理系统外部的站点登录,数据将被下推。这两个人之间相互冲突。我想使用“erss表”而不将其加载到owin中,只需管理表。我不想在启动时创建ERSS,因为它们冲突。反正在外面创造它们吗?

启动

public partial class Startup
{
    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context, user manager and signin manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
        app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

        // Configure the db context, user manager and signin manager to use a single instance per request
        //app.CreatePerOwinContext(ERSS_ApplicationDbContext.Create);
        //app.CreatePerOwinContext<ERSS_ApplicationUserManager>(ERSS_ApplicationUserManager.Create);
        ////app.CreatePerOwinContext<ERSS_ApplicationSignInManager>(ERSS_ApplicationSignInManager.Create);
        //app.CreatePerOwinContext<ERSS_ApplicationRoleManager>(ERSS_ApplicationRoleManager.Create);

        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        // Configure the sign in cookie
        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))
            }
        });
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

        // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
        app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

        // Enables the application to remember the second login verification factor such as phone or email.
        // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.
        // This is similar to the RememberMe option when you log in.
        app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
    }
}

IdentityConfig

public class ERSS_ApplicationUserManager : UserManager<ERSS_ApplicationUser>
{
    public ERSS_ApplicationUserManager(IUserStore<ERSS_ApplicationUser> store)
        : base(store)
    {
    }

    public static ERSS_ApplicationUserManager Create(IdentityFactoryOptions<ERSS_ApplicationUserManager> options, IOwinContext context)
    {
        var manager = new ERSS_ApplicationUserManager(new UserStore<ERSS_ApplicationUser>(context.Get<ERSS_ApplicationDbContext>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<ERSS_ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

        // Configure validation logic for passwords
        manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 8,
            RequireNonLetterOrDigit = false,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };

        // Configure user lockout defaults
        manager.UserLockoutEnabledByDefault = true;
        manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
        manager.MaxFailedAccessAttemptsBeforeLockout = 5;

        // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
        // You can write your own provider and plug it in here.
        manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ERSS_ApplicationUser>
        {
            MessageFormat = "Your security code is {0}"
        });
        manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ERSS_ApplicationUser>
        {
            Subject = "Security Code",
            BodyFormat = "Your security code is {0}"
        });
        manager.EmailService = new EmailService();
        manager.SmsService = new SmsService();
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider =
                new DataProtectorTokenProvider<ERSS_ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
        return manager;
    }
}

public class ERSS_ApplicationRoleManager : RoleManager<IdentityRole>
{
    public ERSS_ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
        : base(roleStore)
    {
    }

    public static ERSS_ApplicationRoleManager Create(IdentityFactoryOptions<ERSS_ApplicationRoleManager> options, IOwinContext context)
    {
        return new ERSS_ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ERSS_ApplicationDbContext>()));
    }
}

我希望能够在我的控制器中创建它

    private ERSS_ApplicationRoleManager _roleManager;
    public ERSS_ApplicationRoleManager RoleManager
    {
        get
        {
            //return _roleManager ?? HttpContext.GetOwinContext().Get<ERSS_ApplicationRoleManager>();
            return _roleManager ?? ERSS_ApplicationRoleManager.Create();
        }
        private set
        {
            _roleManager = value;
        }
    }

0 个答案:

没有答案